FAILED: patch "[PATCH] io_uring: fix leaks on IOPOLL and CQE_SKIP" failed to apply to 5.17-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.17-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From c0713540f6d55c53dca65baaead55a5a8b20552d Mon Sep 17 00:00:00 2001
From: Pavel Begunkov <[email protected]>
Date: Sun, 17 Apr 2022 10:10:34 +0100
Subject: [PATCH] io_uring: fix leaks on IOPOLL and CQE_SKIP
If all completed requests in io_do_iopoll() were marked with REQ_F_CQE_SKIP, we'll not only skip CQE posting but also io_free_batch_list() leaking memory and resources.
Move @nr_events increment before REQ_F_CQE_SKIP check. We'll potentially return the value greater than the real one, but iopolling will deal with it and the userspace will re-iopoll if needed. In anyway, I don't think there are many use cases for REQ_F_CQE_SKIP + IOPOLL.
fs/io_uring.c +1 -2
@@ -2797,11 +2797,10 @@ static int io_do_iopoll(struct io_ring_ctx *ctx, bool force_nonspin)/* order with io_complete_rw_iopoll(), e.g. ->result updates */ if (!smp_load_acquire (&req->iopoll_completed))break ; + nr_events++;if (unlikely (req->flags &REQ_F_CQE_SKIP ))continue ; -__io_fill_cqe_req (req, req->result,io_put_kbuf (req,0 )); - nr_events++; }if (unlikely (!nr_events))
Quoted 5 lines · On 4/25/22 6:50 AM, [email protected] wrote:
The patch below does not apply to the 5.17-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Here's one for 5.17.
From c0713540f6d55c53dca65baaead55a5a8b20552d Mon Sep 17 00:00:00 2001
From: Pavel Begunkov <[email protected]>
Date: Sun, 17 Apr 2022 10:10:34 +0100
Subject: [PATCH] io_uring: fix leaks on IOPOLL and CQE_SKIP
io_uring: fix leaks on IOPOLL and CQE_SKIP
commit c0713540f6d55c53dca65baaead55a5a8b20552d upstream.
If all completed requests in io_do_iopoll() were marked with REQ_F_CQE_SKIP, we'll not only skip CQE posting but also io_free_batch_list() leaking memory and resources.
Move @nr_events increment before REQ_F_CQE_SKIP check. We'll potentially return the value greater than the real one, but iopolling will deal with it and the userspace will re-iopoll if needed. In anyway, I don't think there are many use cases for REQ_F_CQE_SKIP + IOPOLL.
fs/io_uring.c +1 -2
@@ -2612,11 +2612,10 @@ static int io_do_iopoll(struct io_ring_ctx *ctx, bool force_nonspin)/* order with io_complete_rw_iopoll(), e.g. ->result updates */ if (!smp_load_acquire (&req->iopoll_completed))break ; + nr_events++;if (unlikely (req->flags &REQ_F_CQE_SKIP ))continue ; -__io_fill_cqe (ctx, req->user_data, req->result,io_put_kbuf (req)); - nr_events++; }if (unlikely (!nr_events))
Signature · 1 line
Jens Axboe
Greg KH
maintainerQuoted 8 lines · Jens Axboe
Quoted 5 lines · On 4/25/22 6:50 AM, [email protected] wrote:
The patch below does not apply to the 5.17-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.Here's one for 5.17.
Now queued up, thanks!
greg k-h