]> git.hungrycats.org Git - linux/commitdiff
net: Fix thinko in backport of skb destructor fix.
authorDavid Miller <davem@davemloft.net>
Thu, 3 Dec 2009 00:01:04 +0000 (16:01 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 4 Dec 2009 05:15:01 +0000 (21:15 -0800)
As noticed by Oliver Hartkopp, the backport of the
'net: Partially allow skb destructors to be used on receive path'
(2.6.30.y commit: 172570a224fe66d560c097e48fca15b620c76e72,
 upstream commit: d55d87fdff8252d0e2f7c28c2d443aee17e9d70f)
was buggy.

It should have added an skb_orphan() call to both skb_set_owner_w()
and skb_set_owner_r().  Instead it added two calls to skb_set_owner_r().

This fixes it up.

Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
include/net/sock.h

index 9bc2c830b5a430c836420b50dccc15c365e617fe..cda38015fcae78b1902f84887a743ff15c3cb001 100644 (file)
@@ -1223,6 +1223,7 @@ static inline int skb_copy_to_page(struct sock *sk, char __user *from,
 
 static inline void skb_set_owner_w(struct sk_buff *skb, struct sock *sk)
 {
+       skb_orphan(skb);
        sock_hold(sk);
        skb->sk = sk;
        skb->destructor = sock_wfree;
@@ -1231,7 +1232,6 @@ static inline void skb_set_owner_w(struct sk_buff *skb, struct sock *sk)
 
 static inline void skb_set_owner_r(struct sk_buff *skb, struct sock *sk)
 {
-       skb_orphan(skb);
        skb_orphan(skb);
        skb->sk = sk;
        skb->destructor = sock_rfree;