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
parent
d425f13146
commit
01464ea405
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue