io_uring/zcrx: move area reg checks into io_import_area

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>
pull/1354/merge
Pavel Begunkov 2025-09-16 15:27:49 +01:00 committed by Jens Axboe
parent d425f13146
commit 01464ea405
1 changed files with 9 additions and 9 deletions

View File

@ -26,6 +26,8 @@
#include "zcrx.h" #include "zcrx.h"
#include "rsrc.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) #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) 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; 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); ret = io_validate_user_buf_range(area_reg->addr, area_reg->len);
if (ret) if (ret)
return ret; return ret;
@ -395,8 +404,6 @@ static void io_zcrx_free_area(struct io_zcrx_area *area)
kfree(area); kfree(area);
} }
#define IO_ZCRX_AREA_SUPPORTED_FLAGS (IORING_ZCRX_AREA_DMABUF)
static int io_zcrx_append_area(struct io_zcrx_ifq *ifq, static int io_zcrx_append_area(struct io_zcrx_ifq *ifq,
struct io_zcrx_area *area) struct io_zcrx_area *area)
{ {
@ -413,13 +420,6 @@ static int io_zcrx_create_area(struct io_zcrx_ifq *ifq,
unsigned nr_iovs; unsigned nr_iovs;
int i, ret; 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; ret = -ENOMEM;
area = kzalloc(sizeof(*area), GFP_KERNEL); area = kzalloc(sizeof(*area), GFP_KERNEL);
if (!area) if (!area)