| From f020bb63b5d2e5576acadd10e158fe3b04af67ba Mon Sep 17 00:00:00 2001 |
| From: Jason Wang <jasowang@redhat.com> |
| Date: Fri, 17 Sep 2021 16:34:06 +0800 |
| Subject: [PATCH] virtio-net: fix pages leaking when building skb in big mode |
| Git-commit: afd92d82c9d715fb97565408755acad81573591a |
| Patch-mainline: v5.15-rc3 |
| References: stable-5.14.9 |
| |
| [ Upstream commit afd92d82c9d715fb97565408755acad81573591a ] |
| |
| We try to use build_skb() if we had sufficient tailroom. But we forget |
| to release the unused pages chained via private in big mode which will |
| leak pages. Fixing this by release the pages after building the skb in |
| big mode. |
| |
| Cc: Xuan Zhuo <xuanzhuo@linux.alibaba.com> |
| Fixes: fb32856b16ad ("virtio-net: page_to_skb() use build_skb when there's sufficient tailroom") |
| Signed-off-by: Jason Wang <jasowang@redhat.com> |
| Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| Acked-by: Takashi Iwai <tiwai@suse.de> |
| |
| |
| drivers/net/virtio_net.c | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c |
| index eee493685aad..fb96658bb91f 100644 |
| |
| |
| @@ -435,6 +435,10 @@ static struct sk_buff *page_to_skb(struct virtnet_info *vi, |
| |
| skb_reserve(skb, p - buf); |
| skb_put(skb, len); |
| + |
| + page = (struct page *)page->private; |
| + if (page) |
| + give_pages(rq, page); |
| goto ok; |
| } |
| |
| -- |
| 2.26.2 |
| |