pidfs: ensure consistent ENOENT/ESRCH reporting
authorChristian Brauner <brauner@kernel.org>
Fri, 11 Apr 2025 13:22:45 +0000 (15:22 +0200)
committerChristian Brauner <brauner@kernel.org>
Sat, 12 Apr 2025 12:04:53 +0000 (14:04 +0200)
commit17f1b08acf50c0bfb02e21623e53e7e575612b67
treec038848db5e8c37bcc784fb5602c370c7c560099
parent35c9701ea717dc548f1fab5bfa286be98c1bade8
pidfs: ensure consistent ENOENT/ESRCH reporting

In a prior patch series we tried to cleanly differentiate between:

(1) The task has already been reaped.
(2) The caller requested a pidfd for a thread-group leader but the pid
    actually references a struct pid that isn't used as a thread-group
    leader.

as this was causing issues for non-threaded workloads.

But there's cases where the current simple logic is wrong. Specifically,
if the pid was a leader pid and the check races with __unhash_process().
Stabilize this by using the pidfd waitqueue lock.

Link: https://lore.kernel.org/20250411-work-pidfs-enoent-v2-2-60b2d3bb545f@kernel.org
Reviewed-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
kernel/fork.c