Xuan Zhuo
2021-Dec-13 06:25 UTC
[PATCH] virtio-net: make copy len check in xdp_linearize_page
On Mon, 13 Dec 2021 12:50:12 +0800, mengensun8801 at gmail.com wrote:> From: mengensun <mengensun at tencent.com> > > xdp_linearize_page asume ring elem size is smaller then page size > when copy the first ring elem, but, there may be a elem size bigger > then page size. > > add_recvbuf_mergeable may add a hole to ring elem, the hole size is > not sure, according EWMA. > > so, fix it by check copy len,if checked failed, just dropped the > whole frame, not make the memory dirty after the page. > > Signed-off-by: mengensun <mengensun at tencent.com> > Reviewed-by: MengLong Dong <imagedong at tencent.com> > Reviewed-by: ZhengXiong Jiang <mungerjiang at tencent.com>LGTM Reviewed-by: Xuan Zhuo <xuanzhuo at linux.alibaba.com>> --- > drivers/net/virtio_net.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > index 36a4b7c195d5..844bdbd67ff7 100644 > --- a/drivers/net/virtio_net.c > +++ b/drivers/net/virtio_net.c > @@ -662,8 +662,12 @@ static struct page *xdp_linearize_page(struct receive_queue *rq, > int page_off, > unsigned int *len) > { > - struct page *page = alloc_page(GFP_ATOMIC); > + struct page *page; > > + if (*len > PAGE_SIZE - page_off) > + return NULL; > + > + page = alloc_page(GFP_ATOMIC); > if (!page) > return NULL; > > -- > 2.27.0 >