aio: prevent potential eventfd recursion on poll
authorJens Axboe <axboe@kernel.dk>
Mon, 3 Feb 2020 17:33:42 +0000 (10:33 -0700)
committerJens Axboe <axboe@kernel.dk>
Tue, 4 Feb 2020 00:27:47 +0000 (17:27 -0700)
commit01d7a356872eec22ef34a33a5f9cfa917d145468
tree7d5a9a4359507134ddc254f6afbc9adabe064519
parent3e577dcd73a1fdc641bf45e5ea4a37869de221b5
aio: prevent potential eventfd recursion on poll

If we have nested or circular eventfd wakeups, then we can deadlock if
we run them inline from our poll waitqueue wakeup handler. It's also
possible to have very long chains of notifications, to the extent where
we could risk blowing the stack.

Check the eventfd recursion count before calling eventfd_signal(). If
it's non-zero, then punt the signaling to async context. This is always
safe, as it takes us out-of-line in terms of stack and locking context.

Cc: stable@vger.kernel.org # 4.19+
Reviewed-by: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/aio.c