]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
io_uring/zcrx: don't clear not allocated niovs
authorPavel Begunkov <asml.silence@gmail.com>
Tue, 31 Mar 2026 21:07:41 +0000 (22:07 +0100)
committerJens Axboe <axboe@kernel.dk>
Thu, 2 Apr 2026 12:55:36 +0000 (06:55 -0600)
Now that area->is_mapped is set earlier before niovs array is allocated,
io_zcrx_free_area -> io_zcrx_unmap_area in an error path can try to
clear dma addresses for unallocated niovs, fix it.

Fixes: 8c0cab0b7bf7 ("io_uring/zcrx: always dma map in advance")
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://patch.msgid.link/cbcb7749b5a001ecd4d1c303515ce9403215640c.1774780198.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/zcrx.c

index 5c0a4934072226445c76ea5b88bdcae95dbb1f99..d84ad40eae498afb0017f24e68a4eb58e2e201a2 100644 (file)
@@ -289,8 +289,10 @@ static void io_zcrx_unmap_area(struct io_zcrx_ifq *ifq,
                return;
        area->is_mapped = false;
 
-       for (i = 0; i < area->nia.num_niovs; i++)
-               net_mp_niov_set_dma_addr(&area->nia.niovs[i], 0);
+       if (area->nia.niovs) {
+               for (i = 0; i < area->nia.num_niovs; i++)
+                       net_mp_niov_set_dma_addr(&area->nia.niovs[i], 0);
+       }
 
        if (area->mem.is_dmabuf) {
                io_release_dmabuf(&area->mem);