skbuff: fix ftrace handling in skb_unshare
If the skb is not dropped afterwards we should run consume_skb instead kfree_skb. Inside of function skb_unshare we do always a kfree_skb, doesn't depend if skb_copy failed or was successful. This patch switch this behaviour like skb_share_check, if allocation of sk_buff failed we use kfree_skb otherwise consume_skb. Signed-off-by: Alexander Aring <alex.aring@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2c2b2f0cb9
commit
31eff81e94
1 changed files with 6 additions and 1 deletions
|
@ -1203,7 +1203,12 @@ static inline struct sk_buff *skb_unshare(struct sk_buff *skb,
|
|||
might_sleep_if(pri & __GFP_WAIT);
|
||||
if (skb_cloned(skb)) {
|
||||
struct sk_buff *nskb = skb_copy(skb, pri);
|
||||
kfree_skb(skb); /* Free our shared copy */
|
||||
|
||||
/* Free our shared copy */
|
||||
if (likely(nskb))
|
||||
consume_skb(skb);
|
||||
else
|
||||
kfree_skb(skb);
|
||||
skb = nskb;
|
||||
}
|
||||
return skb;
|
||||
|
|
Loading…
Reference in a new issue