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: syzbot+a730016dc0bdce4f6ff5@syzkaller.appspotmail.com Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Родитель
6d816e088c
Коммит
a36da65c46
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче