]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
io_uring: always use original task when preparing req identity
authorJens Axboe <axboe@kernel.dk>
Mon, 16 May 2022 21:05:51 +0000 (23:05 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 May 2022 08:23:48 +0000 (10:23 +0200)
If the ring is setup with IORING_SETUP_IOPOLL and we have more than
one task doing submissions on a ring, we can up in a situation where
we assign the context from the current task rather than the request
originator.

Always use req->task rather than assume it's the same as current.

No upstream patch exists for this issue, as only older kernels with
the non-native workers have this problem.

Reported-by: Kyle Zeng <zengyhkyle@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/io_uring.c

index ab9290ab4cae077f9a8a37d4990b5398bb87e225..4330603eae35dd69677a80335ce8be1c92ed0148 100644 (file)
@@ -1156,7 +1156,7 @@ static inline void __io_req_init_async(struct io_kiocb *req)
  */
 static inline void io_req_init_async(struct io_kiocb *req)
 {
-       struct io_uring_task *tctx = current->io_uring;
+       struct io_uring_task *tctx = req->task->io_uring;
 
        if (req->flags & REQ_F_WORK_INITIALIZED)
                return;