]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests/coredump: fix userspace coredump client detection
authorChristian Brauner <brauner@kernel.org>
Tue, 28 Oct 2025 08:46:00 +0000 (09:46 +0100)
committerChristian Brauner <brauner@kernel.org>
Tue, 4 Nov 2025 21:04:46 +0000 (22:04 +0100)
PIDFD_INFO_COREDUMP is only retrievable until the task has exited. After
it has exited task->mm is NULL. So if the task didn't actually coredump
we can't retrieve it's dumpability settings anymore. Only if the task
did coredump will we have stashed the coredump information in the
respective struct pid.

Link: https://patch.msgid.link/20251028-work-coredump-signal-v1-15-ca449b7b7aa0@kernel.org
Reviewed-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
tools/testing/selftests/coredump/coredump_socket_test.c

index 658f3966064f9e03deead28a0976496d1b465c90..5103d9f1300319cced1489590109341c1c9e4260 100644 (file)
@@ -271,22 +271,26 @@ out:
                        _exit(EXIT_FAILURE);
 
                close(fd_socket);
+               pause();
                _exit(EXIT_SUCCESS);
        }
 
        pidfd = sys_pidfd_open(pid, 0);
        ASSERT_GE(pidfd, 0);
 
-       waitpid(pid, &status, 0);
-       ASSERT_TRUE(WIFEXITED(status));
-       ASSERT_EQ(WEXITSTATUS(status), 0);
-
        ASSERT_TRUE(get_pidfd_info(pidfd, &info));
        ASSERT_GT((info.mask & PIDFD_INFO_COREDUMP), 0);
        ASSERT_EQ((info.coredump_mask & PIDFD_COREDUMPED), 0);
 
        wait_and_check_coredump_server(pid_coredump_server, _metadata, self);
 
+       ASSERT_EQ(sys_pidfd_send_signal(pidfd, SIGKILL, NULL, 0), 0);
+       ASSERT_EQ(close(pidfd), 0);
+
+       waitpid(pid, &status, 0);
+       ASSERT_TRUE(WIFSIGNALED(status));
+       ASSERT_EQ(WTERMSIG(status), SIGKILL);
+
        ASSERT_NE(stat("/tmp/coredump.file", &st), 0);
        ASSERT_EQ(errno, ENOENT);
 }