@@ -418,11 +418,12 @@ TEST_F_FORK(layout1, inval)
418
418
419
419
/* clang-format on */
420
420
421
- TEST_F_FORK (layout1 , file_access_rights )
421
+ TEST_F_FORK (layout1 , file_and_dir_access_rights )
422
422
{
423
423
__u64 access ;
424
424
int err ;
425
- struct landlock_path_beneath_attr path_beneath = {};
425
+ struct landlock_path_beneath_attr path_beneath_file = {},
426
+ path_beneath_dir = {};
426
427
struct landlock_ruleset_attr ruleset_attr = {
427
428
.handled_access_fs = ACCESS_ALL ,
428
429
};
@@ -432,20 +433,33 @@ TEST_F_FORK(layout1, file_access_rights)
432
433
ASSERT_LE (0 , ruleset_fd );
433
434
434
435
/* Tests access rights for files. */
435
- path_beneath .parent_fd = open (file1_s1d2 , O_PATH | O_CLOEXEC );
436
- ASSERT_LE (0 , path_beneath .parent_fd );
436
+ path_beneath_file .parent_fd = open (file1_s1d2 , O_PATH | O_CLOEXEC );
437
+ ASSERT_LE (0 , path_beneath_file .parent_fd );
438
+
439
+ /* Tests access rights for directories. */
440
+ path_beneath_dir .parent_fd =
441
+ open (dir_s1d2 , O_PATH | O_DIRECTORY | O_CLOEXEC );
442
+ ASSERT_LE (0 , path_beneath_dir .parent_fd );
443
+
437
444
for (access = 1 ; access <= ACCESS_LAST ; access <<= 1 ) {
438
- path_beneath .allowed_access = access ;
445
+ path_beneath_dir .allowed_access = access ;
446
+ ASSERT_EQ (0 , landlock_add_rule (ruleset_fd ,
447
+ LANDLOCK_RULE_PATH_BENEATH ,
448
+ & path_beneath_dir , 0 ));
449
+
450
+ path_beneath_file .allowed_access = access ;
439
451
err = landlock_add_rule (ruleset_fd , LANDLOCK_RULE_PATH_BENEATH ,
440
- & path_beneath , 0 );
441
- if (( access | ACCESS_FILE ) == ACCESS_FILE ) {
452
+ & path_beneath_file , 0 );
453
+ if (access & ACCESS_FILE ) {
442
454
ASSERT_EQ (0 , err );
443
455
} else {
444
456
ASSERT_EQ (-1 , err );
445
457
ASSERT_EQ (EINVAL , errno );
446
458
}
447
459
}
448
- ASSERT_EQ (0 , close (path_beneath .parent_fd ));
460
+ ASSERT_EQ (0 , close (path_beneath_file .parent_fd ));
461
+ ASSERT_EQ (0 , close (path_beneath_dir .parent_fd ));
462
+ ASSERT_EQ (0 , close (ruleset_fd ));
449
463
}
450
464
451
465
TEST_F_FORK (layout1 , unknown_access_rights )
0 commit comments