pidfd: getfd should always report ESRCH if a task is exiting
authorTycho Andersen <tandersen@netflix.com>
Wed, 7 Feb 2024 09:19:29 +0000 (10:19 +0100)
committerChristian Brauner <brauner@kernel.org>
Wed, 7 Feb 2024 11:09:44 +0000 (12:09 +0100)
commit0c9bd6bc4bb2ecfe8ce12e9a77ccd762dabe18b4
tree1dbd5b043ffe82884c4e95b1c7aa9bd8afef273e
parent83b290c9e3b5d95891f43a4aeadf6071cbff25d3
pidfd: getfd should always report ESRCH if a task is exiting

We can get EBADF from pidfd_getfd() if a task is currently exiting,
which might be confusing. Let's check PF_EXITING, and just report ESRCH
if so.

I chose PF_EXITING, because it is set in exit_signals(), which is called
before exit_files(). Since ->exit_status is mostly set after
exit_files() in exit_notify(), using that still leaves a window open for
the race.

Reviewed-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Tycho Andersen <tandersen@netflix.com>
Link: https://lore.kernel.org/r/20240206192357.81942-1-tycho@tycho.pizza
Signed-off-by: Christian Brauner <brauner@kernel.org>
kernel/pid.c