[PATCH 10/22] selftests/pidfd: add first supported_mask test

Christian Brauner posted 22 patches 3 months, 1 week ago
[PATCH 10/22] selftests/pidfd: add first supported_mask test
Posted by Christian Brauner 3 months, 1 week ago
Verify that when PIDFD_INFO_SUPPORTED_MASK is requested, the kernel
returns the supported_mask field indicating which flags the kernel
supports.

Signed-off-by: Christian Brauner <brauner@kernel.org>
---
 tools/testing/selftests/pidfd/pidfd_info_test.c | 41 +++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/tools/testing/selftests/pidfd/pidfd_info_test.c b/tools/testing/selftests/pidfd/pidfd_info_test.c
index a0eb6e81eaa2..b31a0597fbae 100644
--- a/tools/testing/selftests/pidfd/pidfd_info_test.c
+++ b/tools/testing/selftests/pidfd/pidfd_info_test.c
@@ -690,4 +690,45 @@ TEST_F(pidfd_info, thread_group_exec_thread)
 	EXPECT_EQ(close(pidfd_thread), 0);
 }
 
+/*
+ * Test: PIDFD_INFO_SUPPORTED_MASK field
+ *
+ * Verify that when PIDFD_INFO_SUPPORTED_MASK is requested, the kernel
+ * returns the supported_mask field indicating which flags the kernel supports.
+ */
+TEST(supported_mask_field)
+{
+	struct pidfd_info info = {
+		.mask = PIDFD_INFO_SUPPORTED_MASK,
+	};
+	int pidfd;
+	pid_t pid;
+
+	pid = create_child(&pidfd, 0);
+	ASSERT_GE(pid, 0);
+
+	if (pid == 0)
+		pause();
+
+	/* Request supported_mask field */
+	ASSERT_EQ(ioctl(pidfd, PIDFD_GET_INFO, &info), 0);
+
+	/* Verify PIDFD_INFO_SUPPORTED_MASK is set in the reply */
+	ASSERT_TRUE(!!(info.mask & PIDFD_INFO_SUPPORTED_MASK));
+
+	/* Verify supported_mask contains expected flags */
+	ASSERT_TRUE(!!(info.supported_mask & PIDFD_INFO_PID));
+	ASSERT_TRUE(!!(info.supported_mask & PIDFD_INFO_CREDS));
+	ASSERT_TRUE(!!(info.supported_mask & PIDFD_INFO_CGROUPID));
+	ASSERT_TRUE(!!(info.supported_mask & PIDFD_INFO_EXIT));
+	ASSERT_TRUE(!!(info.supported_mask & PIDFD_INFO_COREDUMP));
+	ASSERT_TRUE(!!(info.supported_mask & PIDFD_INFO_SUPPORTED_MASK));
+	ASSERT_TRUE(!!(info.supported_mask & PIDFD_INFO_COREDUMP_SIGNAL));
+
+	/* Clean up */
+	sys_pidfd_send_signal(pidfd, SIGKILL, NULL, 0);
+	sys_waitid(P_PIDFD, pidfd, NULL, WEXITED);
+	close(pidfd);
+}
+
 TEST_HARNESS_MAIN

-- 
2.47.3
Re: [PATCH 10/22] selftests/pidfd: add first supported_mask test
Posted by Alexander Mikhalitsyn 3 months ago
Am Di., 28. Okt. 2025 um 09:46 Uhr schrieb Christian Brauner
<brauner@kernel.org>:
>
> Verify that when PIDFD_INFO_SUPPORTED_MASK is requested, the kernel
> returns the supported_mask field indicating which flags the kernel
> supports.
>
> Signed-off-by: Christian Brauner <brauner@kernel.org>

Reviewed-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>

> ---
>  tools/testing/selftests/pidfd/pidfd_info_test.c | 41 +++++++++++++++++++++++++
>  1 file changed, 41 insertions(+)
>
> diff --git a/tools/testing/selftests/pidfd/pidfd_info_test.c b/tools/testing/selftests/pidfd/pidfd_info_test.c
> index a0eb6e81eaa2..b31a0597fbae 100644
> --- a/tools/testing/selftests/pidfd/pidfd_info_test.c
> +++ b/tools/testing/selftests/pidfd/pidfd_info_test.c
> @@ -690,4 +690,45 @@ TEST_F(pidfd_info, thread_group_exec_thread)
>         EXPECT_EQ(close(pidfd_thread), 0);
>  }
>
> +/*
> + * Test: PIDFD_INFO_SUPPORTED_MASK field
> + *
> + * Verify that when PIDFD_INFO_SUPPORTED_MASK is requested, the kernel
> + * returns the supported_mask field indicating which flags the kernel supports.
> + */
> +TEST(supported_mask_field)
> +{
> +       struct pidfd_info info = {
> +               .mask = PIDFD_INFO_SUPPORTED_MASK,
> +       };
> +       int pidfd;
> +       pid_t pid;
> +
> +       pid = create_child(&pidfd, 0);
> +       ASSERT_GE(pid, 0);
> +
> +       if (pid == 0)
> +               pause();
> +
> +       /* Request supported_mask field */
> +       ASSERT_EQ(ioctl(pidfd, PIDFD_GET_INFO, &info), 0);
> +
> +       /* Verify PIDFD_INFO_SUPPORTED_MASK is set in the reply */
> +       ASSERT_TRUE(!!(info.mask & PIDFD_INFO_SUPPORTED_MASK));
> +
> +       /* Verify supported_mask contains expected flags */
> +       ASSERT_TRUE(!!(info.supported_mask & PIDFD_INFO_PID));
> +       ASSERT_TRUE(!!(info.supported_mask & PIDFD_INFO_CREDS));
> +       ASSERT_TRUE(!!(info.supported_mask & PIDFD_INFO_CGROUPID));
> +       ASSERT_TRUE(!!(info.supported_mask & PIDFD_INFO_EXIT));
> +       ASSERT_TRUE(!!(info.supported_mask & PIDFD_INFO_COREDUMP));
> +       ASSERT_TRUE(!!(info.supported_mask & PIDFD_INFO_SUPPORTED_MASK));
> +       ASSERT_TRUE(!!(info.supported_mask & PIDFD_INFO_COREDUMP_SIGNAL));
> +
> +       /* Clean up */
> +       sys_pidfd_send_signal(pidfd, SIGKILL, NULL, 0);
> +       sys_waitid(P_PIDFD, pidfd, NULL, WEXITED);
> +       close(pidfd);
> +}
> +
>  TEST_HARNESS_MAIN
>
> --
> 2.47.3
>