]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
io_uring/zcrx: fix leaking pages on sg init fail
authorPavel Begunkov <asml.silence@gmail.com>
Mon, 21 Jul 2025 09:56:22 +0000 (10:56 +0100)
committerJens Axboe <axboe@kernel.dk>
Mon, 21 Jul 2025 12:47:45 +0000 (06:47 -0600)
If sg_alloc_table_from_pages() fails, io_import_umem() returns without
cleaning up pinned pages first. Fix it.

Fixes: b84621d96ee02 ("io_uring/zcrx: allocate sgtable for umem areas")
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/9fd94d1bc8c316611eccfec7579799182ff3fb0a.1753091564.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/zcrx.c

index 6a983f1ab592ee33bd196ae8ea4b13cd536cc0ef..2d8bc421946335869339e6e831d9b0262b7065a7 100644 (file)
@@ -194,8 +194,10 @@ static int io_import_umem(struct io_zcrx_ifq *ifq,
        ret = sg_alloc_table_from_pages(&mem->page_sg_table, pages, nr_pages,
                                        0, nr_pages << PAGE_SHIFT,
                                        GFP_KERNEL_ACCOUNT);
-       if (ret)
+       if (ret) {
+               unpin_user_pages(pages, nr_pages);
                return ret;
+       }
 
        mem->account_pages = io_count_account_pages(pages, nr_pages);
        ret = io_account_mem(ifq->ctx, mem->account_pages);