io_uring: fix drain stalls by invalid SQE
authorPavel Begunkov <asml.silence@gmail.com>
Wed, 9 Aug 2023 12:21:41 +0000 (13:21 +0100)
committerJens Axboe <axboe@kernel.dk>
Wed, 9 Aug 2023 16:46:46 +0000 (10:46 -0600)
commitcfdbaa3a291d6fd2cb4a1a70d74e63b4abc2f5ec
treee19d60769ab0b9b538f00c6cb1c957f739af4ab3
parentd4b30eed51d79361c290dc25a1386f5611f4982a
io_uring: fix drain stalls by invalid SQE

cq_extra is protected by ->completion_lock, which io_get_sqe() misses.
The bug is harmless as it doesn't happen in real life, requires invalid
SQ index array and racing with submission, and only messes up the
userspace, i.e. stall requests execution but will be cleaned up on
ring destruction.

Fixes: 15641e427070f ("io_uring: don't cache number of dropped SQEs")
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/66096d54651b1a60534bb2023f2947f09f50ef73.1691538547.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/io_uring.c