Commit a36da65c authored by Jens Axboe's avatar Jens Axboe
Browse files

io_uring: fail poll arm on queue proc failure



Check the ipt.error value, it must have been either cleared to zero or
set to another error than the default -EINVAL if we don't go through the
waitqueue proc addition. Just give up on poll at that point and return
failure, this will fallback to async work.

io_poll_add() doesn't suffer from this failure case, as it returns the
error value directly.

Cc: stable@vger.kernel.org # v5.7+
Reported-by: default avatar <syzbot+a730016dc0bdce4f6ff5@syzkaller.appspotmail.com>
Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 6d816e08
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -4883,7 +4883,7 @@ static bool io_arm_poll_handler(struct io_kiocb *req)

	ret = __io_arm_poll_handler(req, &apoll->poll, &ipt, mask,
					io_async_wake);
	if (ret) {
	if (ret || ipt.error) {
		io_poll_remove_double(req, apoll->double_poll);
		spin_unlock_irq(&ctx->completion_lock);
		kfree(apoll->double_poll);