• Pavel Begunkov's avatar
    io_uring/net: fix cleanup double free free_iov init · 4c17a496
    Pavel Begunkov authored
    Having ->async_data doesn't mean it's initialised and previously we vere
    relying on setting F_CLEANUP at the right moment. With zc sendmsg
    though, we set F_CLEANUP early in prep when we alloc a notif and so we
    may allocate async_data, fail in copy_msg_hdr() leaving
    struct io_async_msghdr not initialised correctly but with F_CLEANUP
    set, which causes a ->free_iov double free and probably other nastiness.
    
    Always initialise ->free_iov. Also, now it might point to fast_iov when
    fails, so avoid freeing it during cleanups.
    
    Reported-by: syzbot+edfd15cd4246a3fc615a@syzkaller.appspotmail.com
    Fixes: 493108d9 ("io_uring/net: zerocopy sendmsg")
    Signed-off-by: default avatarPavel Begunkov <asml.silence@gmail.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    4c17a496
net.c 35.4 KB