]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
pppoe: Unshare skb before anything else
authorHerbert Xu <herbert@gondor.apana.org.au>
Thu, 24 Jul 2008 06:53:55 +0000 (23:53 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 28 Jul 2008 17:58:17 +0000 (10:58 -0700)
[ Upstream commit bc6cffd177f9266af38dba96a2cea06c1e7ff932 ]

We need to unshare the skb first as otherwise pskb_may_pull may
write to a shared skb which could be bad.

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>
drivers/net/pppoe.c

index 18cf1be1cde257edfd607aaeeb4200d86d55030c..6bc58ddcbe162c6ee0506b6b4cf1a35b85624629 100644 (file)
@@ -432,12 +432,12 @@ static int pppoe_disc_rcv(struct sk_buff *skb,
        if (dev->nd_net != &init_net)
                goto abort;
 
-       if (!pskb_may_pull(skb, sizeof(struct pppoe_hdr)))
-               goto abort;
-
        if (!(skb = skb_share_check(skb, GFP_ATOMIC)))
                goto out;
 
+       if (!pskb_may_pull(skb, sizeof(struct pppoe_hdr)))
+               goto abort;
+
        ph = pppoe_hdr(skb);
        if (ph->code != PADT_CODE)
                goto abort;