Michael S. Tsirkin
2013-Dec-26 13:32 UTC
[PATCH stable v2 3/3] virtio_net: don't leak memory or block when too many frags
We leak an skb when there are too many frags, we also stop processing the packet in the middle, the result is almost sure to be loss of networking. Reported-by: Michael Dalton <mwdalton at google.com> Acked-by: Michael Dalton <mwdalton at google.com> Signed-off-by: Michael S. Tsirkin <mst at redhat.com> --- drivers/net/virtio_net.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index c0ed6d5..b8665588 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -344,7 +344,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, if (i >= MAX_SKB_FRAGS) { pr_debug("%s: packet too long\n", skb->dev->name); skb->dev->stats.rx_length_errors++; - return NULL; + goto err_frags; } page = virtqueue_get_buf(rq->vq, &len); if (!page) { @@ -365,6 +365,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, err_skb: give_pages(rq, page); while (--num_buf) { +err_frags: buf = virtqueue_get_buf(rq->vq, &len); if (unlikely(!buf)) { pr_debug("%s: rx error: %d buffers missing\n", -- MST
Possibly Parallel Threads
- [PATCH stable v2 3/3] virtio_net: don't leak memory or block when too many frags
- [PATCH stable] virtio_net: don't leak memory or block when too many frags
- [PATCH stable] virtio_net: don't leak memory or block when too many frags
- [PATCH stable v2 1/3] virtio_net: fix error handling for mergeable buffers
- [PATCH stable v2 1/3] virtio_net: fix error handling for mergeable buffers