| From 622e0ca1cd4d459f5af4f2c65f4dc0dd823cb4c3 Mon Sep 17 00:00:00 2001 |
| From: Herbert Xu <herbert@gondor.apana.org.au> |
| Date: Thu, 20 May 2010 23:07:56 -0700 |
| Subject: gro: Fix bogus gso_size on the first fraglist entry |
| |
| From: Herbert Xu <herbert@gondor.apana.org.au> |
| |
| commit 622e0ca1cd4d459f5af4f2c65f4dc0dd823cb4c3 upstream. |
| |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| net/core/skbuff.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/net/core/skbuff.c |
| +++ b/net/core/skbuff.c |
| @@ -2730,6 +2730,7 @@ int skb_gro_receive(struct sk_buff **hea |
| *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; |
| |