Unverified Commit 4c7b2ec2 authored by Christian Brauner's avatar Christian Brauner
Browse files

selftests: fix mntns iteration selftests

Now that we changed permission checking make sure that we reflect that
in the selftests.

Link: https://patch.msgid.link/20260226-work-visibility-fixes-v1-4-d2c2853313bd@kernel.org


Fixes: 9d87b106 ("selftests: add tests for mntns iteration")
Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
Cc: stable@kernel.org # v6.14+
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 8d76afe8
Loading
Loading
Loading
Loading
+15 −10
Original line number Diff line number Diff line
@@ -37,17 +37,20 @@ FIXTURE(iterate_mount_namespaces) {
	__u64 mnt_ns_id[MNT_NS_COUNT];
};

static inline bool mntns_in_list(__u64 *mnt_ns_id, struct mnt_ns_info *info)
{
	for (int i = 0; i < MNT_NS_COUNT; i++) {
		if (mnt_ns_id[i] == info->mnt_ns_id)
			return true;
	}
	return false;
}

FIXTURE_SETUP(iterate_mount_namespaces)
{
	for (int i = 0; i < MNT_NS_COUNT; i++)
		self->fd_mnt_ns[i] = -EBADF;

	/*
	 * Creating a new user namespace let's us guarantee that we only see
	 * mount namespaces that we did actually create.
	 */
	ASSERT_EQ(unshare(CLONE_NEWUSER), 0);

	for (int i = 0; i < MNT_NS_COUNT; i++) {
		struct mnt_ns_info info = {};

@@ -75,13 +78,15 @@ TEST_F(iterate_mount_namespaces, iterate_all_forward)
	fd_mnt_ns_cur = fcntl(self->fd_mnt_ns[0], F_DUPFD_CLOEXEC);
	ASSERT_GE(fd_mnt_ns_cur, 0);

	for (;; count++) {
	for (;;) {
		struct mnt_ns_info info = {};
		int fd_mnt_ns_next;

		fd_mnt_ns_next = ioctl(fd_mnt_ns_cur, NS_MNT_GET_NEXT, &info);
		if (fd_mnt_ns_next < 0 && errno == ENOENT)
			break;
		if (mntns_in_list(self->mnt_ns_id, &info))
			count++;
		ASSERT_GE(fd_mnt_ns_next, 0);
		ASSERT_EQ(close(fd_mnt_ns_cur), 0);
		fd_mnt_ns_cur = fd_mnt_ns_next;
@@ -96,13 +101,15 @@ TEST_F(iterate_mount_namespaces, iterate_all_backwards)
	fd_mnt_ns_cur = fcntl(self->fd_mnt_ns[MNT_NS_LAST_INDEX], F_DUPFD_CLOEXEC);
	ASSERT_GE(fd_mnt_ns_cur, 0);

	for (;; count++) {
	for (;;) {
		struct mnt_ns_info info = {};
		int fd_mnt_ns_prev;

		fd_mnt_ns_prev = ioctl(fd_mnt_ns_cur, NS_MNT_GET_PREV, &info);
		if (fd_mnt_ns_prev < 0 && errno == ENOENT)
			break;
		if (mntns_in_list(self->mnt_ns_id, &info))
			count++;
		ASSERT_GE(fd_mnt_ns_prev, 0);
		ASSERT_EQ(close(fd_mnt_ns_cur), 0);
		fd_mnt_ns_cur = fd_mnt_ns_prev;
@@ -125,7 +132,6 @@ TEST_F(iterate_mount_namespaces, iterate_forward)
		ASSERT_GE(fd_mnt_ns_next, 0);
		ASSERT_EQ(close(fd_mnt_ns_cur), 0);
		fd_mnt_ns_cur = fd_mnt_ns_next;
		ASSERT_EQ(info.mnt_ns_id, self->mnt_ns_id[i]);
	}
}

@@ -144,7 +150,6 @@ TEST_F(iterate_mount_namespaces, iterate_backward)
		ASSERT_GE(fd_mnt_ns_prev, 0);
		ASSERT_EQ(close(fd_mnt_ns_cur), 0);
		fd_mnt_ns_cur = fd_mnt_ns_prev;
		ASSERT_EQ(info.mnt_ns_id, self->mnt_ns_id[i]);
	}
}