]> git.baikalelectronics.ru Git - kernel.git/commit
io_uring: fix possible deadlock between io_uring_{enter,register}
authorJens Axboe <axboe@kernel.dk>
Mon, 15 Apr 2019 16:49:38 +0000 (10:49 -0600)
committerJens Axboe <axboe@kernel.dk>
Mon, 15 Apr 2019 16:49:38 +0000 (10:49 -0600)
commit9fee7732a6865b54699b24bb7d1e7984db05e7ce
treea2b5175f8121ff6efc7e3a26eb075711263dfede
parente225645118c1df2bd9fe8e38f6d55d2e9b02072a
io_uring: fix possible deadlock between io_uring_{enter,register}

If we have multiple threads, one doing io_uring_enter() while the other
is doing io_uring_register(), we can run into a deadlock between the
two. io_uring_register() must wait for existing users of the io_uring
instance to exit. But it does so while holding the io_uring mutex.
Callers of io_uring_enter() may need this mutex to make progress (and
eventually exit). If we wait for users to exit in io_uring_register(),
we can't do so with the io_uring mutex held without potentially risking
a deadlock.

Drop the io_uring mutex while waiting for existing callers to exit. This
is safe and guaranteed to make forward progress, since we already killed
the percpu ref before doing so. Hence later callers of io_uring_enter()
will be rejected.

Reported-by: syzbot+16dc03452dee970a0c3e@syzkaller.appspotmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c