@@ -526,4 +526,61 @@ TEST(cred_transfer)
526526 EXPECT_EQ (EACCES , errno );
527527}
528528
529+ TEST (useless_quiet_rule )
530+ {
531+ struct landlock_ruleset_attr ruleset_attr = {
532+ .handled_access_fs = LANDLOCK_ACCESS_FS_READ_DIR ,
533+ .quiet_access_fs = 0 ,
534+ };
535+ struct landlock_path_beneath_attr path_beneath_attr = {
536+ .allowed_access = LANDLOCK_ACCESS_FS_READ_DIR ,
537+ };
538+ int ruleset_fd , root_fd ;
539+
540+ drop_caps (_metadata );
541+ ruleset_fd =
542+ landlock_create_ruleset (& ruleset_attr , sizeof (ruleset_attr ), 0 );
543+ ASSERT_LE (0 , ruleset_fd );
544+
545+ root_fd = open ("/" , O_PATH | O_CLOEXEC );
546+ ASSERT_LE (0 , root_fd );
547+ path_beneath_attr .parent_fd = root_fd ;
548+ ASSERT_EQ (-1 , landlock_add_rule (ruleset_fd , LANDLOCK_RULE_PATH_BENEATH ,
549+ & path_beneath_attr ,
550+ LANDLOCK_ADD_RULE_QUIET ));
551+ ASSERT_EQ (EINVAL , errno );
552+
553+ /* Check that the rule had not been added. */
554+ ASSERT_EQ (0 , close (root_fd ));
555+ enforce_ruleset (_metadata , ruleset_fd );
556+ ASSERT_EQ (0 , close (ruleset_fd ));
557+
558+ ASSERT_EQ (-1 , open ("/" , O_RDONLY | O_DIRECTORY | O_CLOEXEC ));
559+ ASSERT_EQ (EACCES , errno );
560+ }
561+
562+ TEST (invalid_quiet_bits_1 )
563+ {
564+ struct landlock_ruleset_attr ruleset_attr = {
565+ .handled_access_fs = LANDLOCK_ACCESS_FS_READ_DIR ,
566+ .quiet_access_fs = LANDLOCK_ACCESS_FS_WRITE_FILE ,
567+ };
568+
569+ ASSERT_EQ (-1 , landlock_create_ruleset (& ruleset_attr ,
570+ sizeof (ruleset_attr ), 0 ));
571+ ASSERT_EQ (EINVAL , errno );
572+ }
573+
574+ TEST (invalid_quiet_bits_2 )
575+ {
576+ struct landlock_ruleset_attr ruleset_attr = {
577+ .handled_access_fs = LANDLOCK_ACCESS_FS_READ_DIR ,
578+ .quiet_access_fs = 1ULL << 63 ,
579+ };
580+
581+ ASSERT_EQ (-1 , landlock_create_ruleset (& ruleset_attr ,
582+ sizeof (ruleset_attr ), 0 ));
583+ ASSERT_EQ (EINVAL , errno );
584+ }
585+
529586TEST_HARNESS_MAIN
0 commit comments