From: Oleg Nesterov Date: Sat, 27 Jan 2024 13:24:07 +0000 (+0100) Subject: pidfd: don't do_notify_pidfd() if !thread_group_empty() X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=21e25205d7f9b6d7d3807546dd12ea93844b7c8e;p=linux.git pidfd: don't do_notify_pidfd() if !thread_group_empty() do_notify_pidfd() makes no sense until the whole thread group exits, change do_notify_parent() to check thread_group_empty(). This avoids the unnecessary do_notify_pidfd() when tsk is not a leader, or it exits before other threads, or it has a ptraced EXIT_ZOMBIE sub-thread. Signed-off-by: Oleg Nesterov Link: https://lore.kernel.org/r/20240127132407.GA29136@redhat.com Reviewed-by: Tycho Andersen Signed-off-by: Christian Brauner --- diff --git a/kernel/signal.c b/kernel/signal.c index c9c57d053ce4f..9561a3962ca68 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -2050,9 +2050,11 @@ bool do_notify_parent(struct task_struct *tsk, int sig) WARN_ON_ONCE(!tsk->ptrace && (tsk->group_leader != tsk || !thread_group_empty(tsk))); - - /* Wake up all pidfd waiters */ - do_notify_pidfd(tsk); + /* + * tsk is a group leader and has no threads, wake up the pidfd waiters. + */ + if (thread_group_empty(tsk)) + do_notify_pidfd(tsk); if (sig != SIGCHLD) { /*