From: Pavel Begunkov Date: Tue, 31 Mar 2026 21:07:38 +0000 (+0100) Subject: io_uring/zcrx: reject REG_NODEV with large rx_buf_size X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a9d008489f0c5304ca7f705348324e47824a7454;p=thirdparty%2Fkernel%2Flinux.git io_uring/zcrx: reject REG_NODEV with large rx_buf_size The copy fallback path doesn't care about the actual niov size and only uses first PAGE_SIZE bytes, and any additional space will be wasted. Since ZCRX_REG_NODEV solely relies on the copy path, it doesn't make sense to support non-standard rx_buf_len. Reject it for now, and re-enable once improved. Fixes: c11728021d5cd ("io_uring/zcrx: implement device-less mode for zcrx") Signed-off-by: Pavel Begunkov Link: https://patch.msgid.link/3e7652d9c27f8ac5d2b141e3af47971f2771fb05.1774780198.git.asml.silence@gmail.com Signed-off-by: Jens Axboe --- diff --git a/io_uring/zcrx.c b/io_uring/zcrx.c index f94f74d0f5660..1ce867c68446b 100644 --- a/io_uring/zcrx.c +++ b/io_uring/zcrx.c @@ -449,6 +449,8 @@ static int io_zcrx_create_area(struct io_zcrx_ifq *ifq, return -EINVAL; buf_size_shift = ilog2(reg->rx_buf_len); } + if (!ifq->dev && buf_size_shift != PAGE_SHIFT) + return -EOPNOTSUPP; ret = -ENOMEM; area = kzalloc_obj(*area); @@ -462,7 +464,7 @@ static int io_zcrx_create_area(struct io_zcrx_ifq *ifq, if (ifq->dev) area->is_mapped = true; - if (buf_size_shift > io_area_max_shift(&area->mem)) { + if (ifq->dev && buf_size_shift > io_area_max_shift(&area->mem)) { ret = -ERANGE; goto err; }