pidfd: Add warning if exit_state is 0 during notification
authorJoel Fernandes (Google) <joel@joelfernandes.org>
Wed, 24 Jul 2019 16:48:16 +0000 (12:48 -0400)
committerChristian Brauner <christian@brauner.io>
Mon, 29 Jul 2019 15:20:19 +0000 (17:20 +0200)
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>
kernel/signal.c

index 91b789dd6e722ef96f8cf4440eb8f5bbc857ac60..349f5a67f100e8bc33ed4ac44f717de482817776 100644 (file)
@@ -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);
 }