Commit 1a3bd6ea authored by Xuan Zhuo's avatar Xuan Zhuo Committed by David S. Miller
Browse files

virtio_net: free xdp shinfo frags when build_skb_from_xdp_buff() fails



build_skb_from_xdp_buff() may return NULL, in this case
we need to free the frags of xdp shinfo.

Fixes: fab89baf ("virtio-net: support multi-buffer xdp")
Signed-off-by: default avatarXuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Reviewed-by: default avatarYunsheng Lin <linyunsheng@huawei.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent fa0f1ba7
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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 (unlikely(!head_skb))
				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: