]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
Add missing UFO initialisations
authorHerbert Xu <herbert@gondor.apana.org.au>
Thu, 13 Jul 2006 09:11:01 +0000 (19:11 +1000)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 25 Jul 2006 03:35:25 +0000 (20:35 -0700)
This bug was unknowingly fixed the GSO patches (or rather, its effect was
unknown at the time).

Thanks to Marco Berizzi's persistence which is documented in the thread
"ipsec tunnel asymmetrical mtu", we now know that it can have highly
non-obvious symptoms.

What happens is that uninitialised uso_size fields can cause packets to
be incorrectly identified as UFO, which means that it does not get
fragmented even if it's over the MTU.

The fix is simple enough.

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/dev.c
net/core/skbuff.c

index 4fba549caf29911c42f7674310fa35aaa993a36c..7d472edd86e772b4c5f0d706b945afd49496f2ab 100644 (file)
@@ -1246,6 +1246,7 @@ int __skb_linearize(struct sk_buff *skb, gfp_t gfp_mask)
        atomic_set(&ninfo->dataref, 1);
        ninfo->tso_size = skb_shinfo(skb)->tso_size;
        ninfo->tso_segs = skb_shinfo(skb)->tso_segs;
+       ninfo->ufo_size = skb_shinfo(skb)->ufo_size;
        ninfo->nr_frags = 0;
        ninfo->frag_list = NULL;
 
index fb3770f9c09405f3dce34e2b429e74d4a9761508..0280535bdd5b219adae048fadc0970394f4203a5 100644 (file)
@@ -240,6 +240,7 @@ struct sk_buff *alloc_skb_from_cache(kmem_cache_t *cp,
        skb_shinfo(skb)->nr_frags  = 0;
        skb_shinfo(skb)->tso_size = 0;
        skb_shinfo(skb)->tso_segs = 0;
+       skb_shinfo(skb)->ufo_size = 0;
        skb_shinfo(skb)->frag_list = NULL;
 out:
        return skb;
@@ -529,6 +530,7 @@ static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
        atomic_set(&new->users, 1);
        skb_shinfo(new)->tso_size = skb_shinfo(old)->tso_size;
        skb_shinfo(new)->tso_segs = skb_shinfo(old)->tso_segs;
+       skb_shinfo(new)->ufo_size = skb_shinfo(old)->ufo_size;
 }
 
 /**