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>
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;
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;