| From 48900cb6af4282fa0fb6ff4d72a81aa3dadb5c39 Mon Sep 17 00:00:00 2001 |
| From: Jason Wang <jasowang@redhat.com> |
| Date: Wed, 5 Aug 2015 10:34:04 +0800 |
| Subject: virtio-net: drop NETIF_F_FRAGLIST |
| |
| commit 48900cb6af4282fa0fb6ff4d72a81aa3dadb5c39 upstream. |
| |
| virtio declares support for NETIF_F_FRAGLIST, but assumes |
| that there are at most MAX_SKB_FRAGS + 2 fragments which isn't |
| always true with a fraglist. |
| |
| A longer fraglist in the skb will make the call to skb_to_sgvec overflow |
| the sg array, leading to memory corruption. |
| |
| Drop NETIF_F_FRAGLIST so we only get what we can handle. |
| |
| Cc: Michael S. Tsirkin <mst@redhat.com> |
| Signed-off-by: Jason Wang <jasowang@redhat.com> |
| Acked-by: Michael S. Tsirkin <mst@redhat.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Zefan Li <lizefan@huawei.com> |
| --- |
| drivers/net/virtio_net.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/net/virtio_net.c |
| +++ b/drivers/net/virtio_net.c |
| @@ -1036,9 +1036,9 @@ static int virtnet_probe(struct virtio_d |
| /* Do we support "hardware" checksums? */ |
| if (virtio_has_feature(vdev, VIRTIO_NET_F_CSUM)) { |
| /* This opens up the world of extra features. */ |
| - dev->hw_features |= NETIF_F_HW_CSUM|NETIF_F_SG|NETIF_F_FRAGLIST; |
| + dev->hw_features |= NETIF_F_HW_CSUM | NETIF_F_SG; |
| if (csum) |
| - dev->features |= NETIF_F_HW_CSUM|NETIF_F_SG|NETIF_F_FRAGLIST; |
| + dev->features |= NETIF_F_HW_CSUM | NETIF_F_SG; |
| |
| if (virtio_has_feature(vdev, VIRTIO_NET_F_GSO)) { |
| dev->hw_features |= NETIF_F_TSO | NETIF_F_UFO |