summaryrefslogtreecommitdiffstats
path: root/kernel/signal.c
diff options
context:
space:
mode:
authorJoel Fernandes (Google) <joel@joelfernandes.org>2019-07-24 12:48:16 -0400
committerChristian Brauner <christian@brauner.io>2019-07-29 17:20:19 +0200
commit1caf7d50f46bd0388e38e653b146aa81700e8eb8 (patch)
treef98d18c6f5c7a5233bcba6d4e9969cffa4e82f4c /kernel/signal.c
parent3884ae44f41247e0ae41952d4fad46db86d2e0a8 (diff)
downloadlinux-1caf7d50f46bd0388e38e653b146aa81700e8eb8.tar.gz
linux-1caf7d50f46bd0388e38e653b146aa81700e8eb8.tar.bz2
linux-1caf7d50f46bd0388e38e653b146aa81700e8eb8.zip
pidfd: Add warning if exit_state is 0 during notification
Previously a condition got missed where the pidfd waiters are awakened before the exit_state gets set. This can result in a missed notification [1] and the polling thread waiting forever. It is fixed now, however it would be nice to avoid this kind of issue going unnoticed in the future. So just add a warning to catch it in the future. /* References */ [1]: https://lore.kernel.org/lkml/20190717172100.261204-1-joel@joelfernandes.org/ Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org> Link: https://lore.kernel.org/r/20190724164816.201099-1-joel@joelfernandes.org Signed-off-by: Christian Brauner <christian@brauner.io>
Diffstat (limited to 'kernel/signal.c')
-rw-r--r--kernel/signal.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/kernel/signal.c b/kernel/signal.c
index 91b789dd6e72..349f5a67f100 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -1885,6 +1885,7 @@ static void do_notify_pidfd(struct task_struct *task)
{
struct pid *pid;
+ WARN_ON(task->exit_state == 0);
pid = task_pid(task);
wake_up_all(&pid->wait_pidfd);
}