From: Oleg Nesterov Date: Sun, 22 Feb 2026 15:23:37 +0000 (+0100) Subject: exit: kill unnecessary thread_group_leader() checks in exit_notify() and do_notify_pa... X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=617ab884b893032765fbc0ebf656fa3015016648;p=thirdparty%2Fkernel%2Fstable.git exit: kill unnecessary thread_group_leader() checks in exit_notify() and do_notify_parent() thread_group_empty(tsk) is only possible if tsk is a group leader, and thread_group_empty() already does the thread_group_leader() check. So it makes no sense to check "thread_group_leader() && thread_group_empty()"; thread_group_empty() alone is enough. Link: https://lkml.kernel.org/r/aZsfeegKZPZZszJh@redhat.com Signed-off-by: Oleg Nesterov Cc: Christian Brauner Cc: Mateusz Guzik Cc: Kees Cook Cc; Deepanshu Kartikey Signed-off-by: Andrew Morton --- diff --git a/kernel/exit.c b/kernel/exit.c index ede3117fa7d4..1f32023d0dbe 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -748,14 +748,12 @@ static void exit_notify(struct task_struct *tsk, int group_dead) tsk->exit_state = EXIT_ZOMBIE; if (unlikely(tsk->ptrace)) { - int sig = thread_group_leader(tsk) && - thread_group_empty(tsk) && - !ptrace_reparented(tsk) ? - tsk->exit_signal : SIGCHLD; + int sig = thread_group_empty(tsk) && !ptrace_reparented(tsk) + ? tsk->exit_signal : SIGCHLD; autoreap = do_notify_parent(tsk, sig); } else if (thread_group_leader(tsk)) { autoreap = thread_group_empty(tsk) && - do_notify_parent(tsk, tsk->exit_signal); + do_notify_parent(tsk, tsk->exit_signal); } else { autoreap = true; /* untraced sub-thread */ diff --git a/kernel/signal.c b/kernel/signal.c index d65d0fe24bfb..ca23059a947d 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -2178,8 +2178,7 @@ bool do_notify_parent(struct task_struct *tsk, int sig) /* do_notify_parent_cldstop should have been called instead. */ WARN_ON_ONCE(task_is_stopped_or_traced(tsk)); - WARN_ON_ONCE(!tsk->ptrace && - (tsk->group_leader != tsk || !thread_group_empty(tsk))); + WARN_ON_ONCE(!tsk->ptrace && !thread_group_empty(tsk)); /* ptraced, or group-leader without sub-threads */ do_notify_pidfd(tsk);