Unverified Commit e178b404 authored by Mickaël Salaün's avatar Mickaël Salaün
Browse files

selftests/landlock: Extend tests for landlock_restrict_self(2)'s flags

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: default avatarMickaël Salaün <mic@digikod.net>
parent ec12a8d4
Loading
Loading
Loading
Loading
+71 −0
Original line number Diff line number Diff line
@@ -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 = {