]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
io_uring/zcrx: move area reg checks into io_import_area
authorPavel Begunkov <asml.silence@gmail.com>
Tue, 16 Sep 2025 14:27:49 +0000 (15:27 +0100)
committerJens Axboe <axboe@kernel.dk>
Tue, 16 Sep 2025 18:37:20 +0000 (12:37 -0600)
io_import_area() is responsible for importing memory and parsing
io_uring_zcrx_area_reg, so move all area reg structure checks into the
function.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/zcrx.c

index c64b8c7ddedf5dfba034446986db827412f4574f..ef8d60b926465a416d3fd0ab90d3a7e123c894b1 100644 (file)
@@ -26,6 +26,8 @@
 #include "zcrx.h"
 #include "rsrc.h"
 
+#define IO_ZCRX_AREA_SUPPORTED_FLAGS   (IORING_ZCRX_AREA_DMABUF)
+
 #define IO_DMA_ATTR (DMA_ATTR_SKIP_CPU_SYNC | DMA_ATTR_WEAK_ORDERING)
 
 static inline struct io_zcrx_ifq *io_pp_to_ifq(struct page_pool *pp)
@@ -231,6 +233,13 @@ static int io_import_area(struct io_zcrx_ifq *ifq,
 {
        int ret;
 
+       if (area_reg->flags & ~IO_ZCRX_AREA_SUPPORTED_FLAGS)
+               return -EINVAL;
+       if (area_reg->rq_area_token)
+               return -EINVAL;
+       if (area_reg->__resv2[0] || area_reg->__resv2[1])
+               return -EINVAL;
+
        ret = io_validate_user_buf_range(area_reg->addr, area_reg->len);
        if (ret)
                return ret;
@@ -395,8 +404,6 @@ static void io_zcrx_free_area(struct io_zcrx_area *area)
        kfree(area);
 }
 
-#define IO_ZCRX_AREA_SUPPORTED_FLAGS   (IORING_ZCRX_AREA_DMABUF)
-
 static int io_zcrx_append_area(struct io_zcrx_ifq *ifq,
                                struct io_zcrx_area *area)
 {
@@ -413,13 +420,6 @@ static int io_zcrx_create_area(struct io_zcrx_ifq *ifq,
        unsigned nr_iovs;
        int i, ret;
 
-       if (area_reg->flags & ~IO_ZCRX_AREA_SUPPORTED_FLAGS)
-               return -EINVAL;
-       if (area_reg->rq_area_token)
-               return -EINVAL;
-       if (area_reg->__resv2[0] || area_reg->__resv2[1])
-               return -EINVAL;
-
        ret = -ENOMEM;
        area = kzalloc(sizeof(*area), GFP_KERNEL);
        if (!area)