gro: Fix bogus gso_size on the first fraglist entry
authorHerbert Xu <herbert@gondor.apana.org.au>
Fri, 21 May 2010 06:07:56 +0000 (23:07 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 21 May 2010 06:07:56 +0000 (23:07 -0700)
When GRO produces fraglist entries, and the resulting skb hits
an interface that is incapable of TSO but capable of FRAGLIST,
we end up producing a bogus packet with gso_size non-zero.

This was reported in the field with older versions of KVM that
did not set the TSO bits on tuntap.

This patch fixes that.

Reported-by: Igor Zhang <yugzhang@redhat.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/skbuff.c

index c543dd252433c84eafc9ef3b0a0d3be644211dd3..4c11000a96aaba4deeff79e0f7f9d3c8b8bb29b9 100644 (file)
@@ -2718,6 +2718,7 @@ int skb_gro_receive(struct sk_buff **head, struct sk_buff *skb)
        *NAPI_GRO_CB(nskb) = *NAPI_GRO_CB(p);
        skb_shinfo(nskb)->frag_list = p;
        skb_shinfo(nskb)->gso_size = pinfo->gso_size;
+       pinfo->gso_size = 0;
        skb_header_release(p);
        nskb->prev = p;