• Pavel Begunkov's avatar
    io_uring: fail cancellation for EXITING tasks · 617a8948
    Pavel Begunkov authored
    WARNING: CPU: 1 PID: 20 at fs/io_uring.c:6269 io_try_cancel_userdata+0x3c5/0x640 fs/io_uring.c:6269
    CPU: 1 PID: 20 Comm: kworker/1:0 Not tainted 5.16.0-rc1-syzkaller #0
    Workqueue: events io_fallback_req_func
    RIP: 0010:io_try_cancel_userdata+0x3c5/0x640 fs/io_uring.c:6269
    Call Trace:
     <TASK>
     io_req_task_link_timeout+0x6b/0x1e0 fs/io_uring.c:6886
     io_fallback_req_func+0xf9/0x1ae fs/io_uring.c:1334
     process_one_work+0x9b2/0x1690 kernel/workqueue.c:2298
     worker_thread+0x658/0x11f0 kernel/workqueue.c:2445
     kthread+0x405/0x4f0 kernel/kthread.c:327
     ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:295
     </TASK>
    
    We need original task's context to do cancellations, so if it's dying
    and the callback is executed in a fallback mode, fail the cancellation
    attempt.
    
    Fixes: 89b263f6 ("io_uring: run linked timeouts from task_work")
    Cc: stable@kernel.org # 5.15+
    Reported-by: syzbot+ab0cfe96c2b3cd1c1153@syzkaller.appspotmail.com
    Signed-off-by: default avatarPavel Begunkov <asml.silence@gmail.com>
    Link: https://lore.kernel.org/r/4c41c5f379c6941ad5a07cd48cb66ed62199cf7e.1637937097.git.asml.silence@gmail.comSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    617a8948
io_uring.c 275 KB