diff --git a/[refs] b/[refs] index 2551d0509c9c..b9bc59f4bcde 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 868eefeb17d40f6acde00ad8165a268529cf6d24 +refs/heads/master: 1080e512d44d4f67b8beb8edf25a1bbcb1066dc7 diff --git a/trunk/net/core/dev.c b/trunk/net/core/dev.c index d70e4a3a49f2..cca02ae7a844 100644 --- a/trunk/net/core/dev.c +++ b/trunk/net/core/dev.c @@ -1632,6 +1632,8 @@ static inline int deliver_skb(struct sk_buff *skb, struct packet_type *pt_prev, struct net_device *orig_dev) { + if (unlikely(skb_orphan_frags(skb, GFP_ATOMIC))) + return -ENOMEM; atomic_inc(&skb->users); return pt_prev->func(skb, skb->dev, pt_prev, orig_dev); } @@ -3262,7 +3264,10 @@ static int __netif_receive_skb(struct sk_buff *skb) } if (pt_prev) { - ret = pt_prev->func(skb, skb->dev, pt_prev, orig_dev); + if (unlikely(skb_orphan_frags(skb, GFP_ATOMIC))) + ret = -ENOMEM; + else + ret = pt_prev->func(skb, skb->dev, pt_prev, orig_dev); } else { atomic_long_inc(&skb->dev->rx_dropped); kfree_skb(skb);