Xuan Zhuo
2023-Mar-14 11:27 UTC
[PATCH net v1 2/2] virtio_net: free xdp shinfo frags when build_skb_from_xdp_buff() fails
On Tue, 14 Mar 2023 19:19:19 +0800, Yunsheng Lin <linyunsheng at huawei.com> wrote:> On 2023/3/14 18:49, Xuan Zhuo wrote: > > build_skb_from_xdp_buff() may return NULL, in this case > > we need to free the frags of xdp shinfo. > > > > Fixes: fab89bafa95b ("virtio-net: support multi-buffer xdp") > > Signed-off-by: Xuan Zhuo <xuanzhuo at linux.alibaba.com> > > Acked-by: Michael S. Tsirkin <mst at redhat.com> > > --- > > drivers/net/virtio_net.c | 5 ++++- > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > > index 8ecf7a341d54..d36183be0481 100644 > > --- a/drivers/net/virtio_net.c > > +++ b/drivers/net/virtio_net.c > > @@ -1273,9 +1273,12 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, > > > > switch (act) { > > case XDP_PASS: > > + head_skb = build_skb_from_xdp_buff(dev, vi, &xdp, xdp_frags_truesz); > > + if (!head_skb) > > It is a error case, perhaps add a unlikely() for it.Yes. Will fix. Thanks.> > > + goto err_xdp_frags; > > + > > if (unlikely(xdp_page != page)) > > put_page(page); > > - head_skb = build_skb_from_xdp_buff(dev, vi, &xdp, xdp_frags_truesz); > > rcu_read_unlock(); > > return head_skb; > > case XDP_TX: > >