• Pavel Begunkov's avatar
    io_uring: fix queueing half-created requests · c6d3d9cb
    Pavel Begunkov authored
    [   27.259845] general protection fault, probably for non-canonical address 0xdffffc0000000005: 0000 [#1] SMP KASAN PTI
    [   27.261043] KASAN: null-ptr-deref in range [0x0000000000000028-0x000000000000002f]
    [   27.263730] RIP: 0010:sock_from_file+0x20/0x90
    [   27.272444] Call Trace:
    [   27.272736]  io_sendmsg+0x98/0x600
    [   27.279216]  io_issue_sqe+0x498/0x68d0
    [   27.281142]  __io_queue_sqe+0xab/0xb50
    [   27.285830]  io_req_task_submit+0xbf/0x1b0
    [   27.286306]  tctx_task_work+0x178/0xad0
    [   27.288211]  task_work_run+0xe2/0x190
    [   27.288571]  exit_to_user_mode_prepare+0x1a1/0x1b0
    [   27.289041]  syscall_exit_to_user_mode+0x19/0x50
    [   27.289521]  do_syscall_64+0x48/0x90
    [   27.289871]  entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    io_req_complete_failed() -> io_req_complete_post() ->
    io_req_task_queue() still would try to enqueue hard linked request,
    which can be half prepared (e.g. failed init), so we can't allow
    that to happen.
    
    Fixes: a8295b98 ("io_uring: fix failed linkchain code logic")
    Reported-by: syzbot+f9704d1878e290eddf73@syzkaller.appspotmail.com
    Signed-off-by: default avatarPavel Begunkov <asml.silence@gmail.com>
    Link: https://lore.kernel.org/r/70b513848c1000f88bd75965504649c6bb1415c0.1630415423.git.asml.silence@gmail.comSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    c6d3d9cb
io_uring.c 262 KB