]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
selftests/landlock: Extend tests for landlock_restrict_self(2)'s flags
authorMickaël Salaün <mic@digikod.net>
Thu, 20 Mar 2025 19:07:10 +0000 (20:07 +0100)
committerMickaël Salaün <mic@digikod.net>
Wed, 26 Mar 2025 12:59:45 +0000 (13:59 +0100)
Add the base_test's restrict_self_fd_flags tests to align with previous
restrict_self_fd tests but with the new
LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF flag.

Add the restrict_self_flags tests to check that
LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF,
LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON, and
LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF are valid but not the next
bit.  Some checks are similar to restrict_self_checks_ordering's ones.

Cc: Günther Noack <gnoack@google.com>
Cc: Paul Moore <paul@paul-moore.com>
Link: https://lore.kernel.org/r/20250320190717.2287696-22-mic@digikod.net
Signed-off-by: Mickaël Salaün <mic@digikod.net>
tools/testing/selftests/landlock/base_test.c

index 25993030f3ef81d2b637e373e7bd7ddc29ee77c1..7b69002239d7e9e99c24c3fc88423374d2ed82c6 100644 (file)
@@ -288,6 +288,77 @@ TEST(restrict_self_fd)
        EXPECT_EQ(EBADFD, errno);
 }
 
+TEST(restrict_self_fd_flags)
+{
+       int fd;
+
+       fd = open("/dev/null", O_RDONLY | O_CLOEXEC);
+       ASSERT_LE(0, fd);
+
+       /*
+        * LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF accepts -1 but not any file
+        * descriptor.
+        */
+       EXPECT_EQ(-1, landlock_restrict_self(
+                             fd, LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF));
+       EXPECT_EQ(EBADFD, errno);
+}
+
+TEST(restrict_self_flags)
+{
+       const __u32 last_flag = LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF;
+
+       /* Tests invalid flag combinations. */
+
+       EXPECT_EQ(-1, landlock_restrict_self(-1, last_flag << 1));
+       EXPECT_EQ(EINVAL, errno);
+
+       EXPECT_EQ(-1, landlock_restrict_self(-1, -1));
+       EXPECT_EQ(EINVAL, errno);
+
+       /* Tests valid flag combinations. */
+
+       EXPECT_EQ(-1, landlock_restrict_self(-1, 0));
+       EXPECT_EQ(EBADF, errno);
+
+       EXPECT_EQ(-1, landlock_restrict_self(
+                             -1, LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF));
+       EXPECT_EQ(EBADF, errno);
+
+       EXPECT_EQ(-1,
+                 landlock_restrict_self(
+                         -1,
+                         LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF |
+                                 LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF));
+       EXPECT_EQ(EBADF, errno);
+
+       EXPECT_EQ(-1,
+                 landlock_restrict_self(
+                         -1,
+                         LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON |
+                                 LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF));
+       EXPECT_EQ(EBADF, errno);
+
+       EXPECT_EQ(-1, landlock_restrict_self(
+                             -1, LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON));
+       EXPECT_EQ(EBADF, errno);
+
+       EXPECT_EQ(-1,
+                 landlock_restrict_self(
+                         -1, LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF |
+                                     LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON));
+       EXPECT_EQ(EBADF, errno);
+
+       /* Tests with an invalid ruleset_fd. */
+
+       EXPECT_EQ(-1, landlock_restrict_self(
+                             -2, LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF));
+       EXPECT_EQ(EBADF, errno);
+
+       EXPECT_EQ(0, landlock_restrict_self(
+                            -1, LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF));
+}
+
 TEST(ruleset_fd_io)
 {
        struct landlock_ruleset_attr ruleset_attr = {