signal/seccomp: Dump core when there is only one live thread
authorEric W. Biederman <ebiederm@xmission.com>
Wed, 23 Jun 2021 21:51:49 +0000 (16:51 -0500)
committerEric W. Biederman <ebiederm@xmission.com>
Thu, 26 Aug 2021 23:06:41 +0000 (18:06 -0500)
Replace get_nr_threads with atomic_read(&current->signal->live) as
that is a more accurate number that is decremented sooner.

Acked-by: Kees Cook <keescook@chromium.org>
Link: https://lkml.kernel.org/r/87lf6z6qbd.fsf_-_@disp2133
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
kernel/seccomp.c

index abcbd3d..afa4db0 100644 (file)
@@ -1264,7 +1264,7 @@ static int __seccomp_filter(int this_syscall, const struct seccomp_data *sd,
                seccomp_log(this_syscall, SIGSYS, action, true);
                /* Dump core only if this is the last remaining thread. */
                if (action != SECCOMP_RET_KILL_THREAD ||
-                   get_nr_threads(current) == 1) {
+                   (atomic_read(&current->signal->live) == 1)) {
                        /* Show the original registers in the dump. */
                        syscall_rollback(current, current_pt_regs());
                        /* Trigger a coredump with SIGSYS */