• Pavel Begunkov's avatar
    io_uring: close a small race gap for files cancel · dfea9fce
    Pavel Begunkov authored
    The purpose of io_uring_cancel_files() is to wait for all requests
    matching ->files to go/be cancelled. We should first drop files of a
    request in io_req_drop_files() and only then make it undiscoverable for
    io_uring_cancel_files.
    
    First drop, then delete from list. It's ok to leave req->id->files
    dangling, because it's not dereferenced by cancellation code, only
    compared against. It would potentially go to sleep and be awaken by
    following in io_req_drop_files() wake_up().
    
    Fixes: 0f212204 ("io_uring: don't rely on weak ->files references")
    Cc: <stable@vger.kernel.org> # 5.5+
    Signed-off-by: default avatarPavel Begunkov <asml.silence@gmail.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    dfea9fce
io_uring.c 240 KB