The CLONE_CLEAR_SIGHAND test intends to verify that
CLONE_CLEAR_SIGHAND and CLONE_SIGHAND are mutually exclusive. However,
CLONE_SIGHAND without CLONE_VM is independently invalid, so the test
input has another reason to fail with EINVAL.

Add CLONE_VM so that CLONE_SIGHAND is otherwise valid, and require
clone3() to fail with EINVAL. This ensures the test exercises the
intended flag conflict and does not accept an unrelated failure.

Fixes: de5287235631 ("tests: test CLONE_CLEAR_SIGHAND")
Signed-off-by: Paul Dolan <[email protected]>
---
 tools/testing/selftests/clone3/clone3_clear_sighand.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/tools/testing/selftests/clone3/clone3_clear_sighand.c 
b/tools/testing/selftests/clone3/clone3_clear_sighand.c
index de0c9d62015d..0ad62b80ada2 100644
--- a/tools/testing/selftests/clone3/clone3_clear_sighand.c
+++ b/tools/testing/selftests/clone3/clone3_clear_sighand.c
@@ -50,12 +50,12 @@ static void test_clone3_clear_sighand(void)
         * Check that CLONE_CLEAR_SIGHAND and CLONE_SIGHAND are mutually
         * exclusive.
         */
-       args.flags |= CLONE_CLEAR_SIGHAND | CLONE_SIGHAND;
+       args.flags |= CLONE_VM | CLONE_CLEAR_SIGHAND | CLONE_SIGHAND;
        args.exit_signal = SIGCHLD;
        pid = sys_clone3(&args, sizeof(args));
-       if (pid > 0)
+       if (pid != -1 || errno != EINVAL)
                ksft_exit_fail_msg(
-                       "clone3(CLONE_CLEAR_SIGHAND | CLONE_SIGHAND) 
succeeded\n");
+                       "clone3(CLONE_CLEAR_SIGHAND | CLONE_SIGHAND) did not 
fail with EINVAL\n");
 
        act.sa_handler = nop_handler;
        ret = sigemptyset(&act.sa_mask);
-- 
2.55.0


Reply via email to