net: skb_orphan() changes
authorEric Dumazet <edumazet@google.com>
Tue, 30 Jul 2013 23:11:15 +0000 (16:11 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 31 Jul 2013 22:24:08 +0000 (15:24 -0700)
It is illegal to set skb->sk without corresponding destructor.

Its therefore safe for skb_orphan() to not clear skb->sk if
skb->destructor is not set.

Also avoid clearing skb->destructor if already NULL.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/skbuff.h

index 5afefa01a13c892e1fe9eb7ce6fc3f047e5880ba..a95547adff257475014848bc7f61e26b4adeef43 100644 (file)
@@ -1805,10 +1805,11 @@ static inline void pskb_trim_unique(struct sk_buff *skb, unsigned int len)
  */
 static inline void skb_orphan(struct sk_buff *skb)
 {
-       if (skb->destructor)
+       if (skb->destructor) {
                skb->destructor(skb);
-       skb->destructor = NULL;
-       skb->sk         = NULL;
+               skb->destructor = NULL;
+               skb->sk         = NULL;
+       }
 }
 
 /**