From 924d30e223dfec4a83135b2d104d69e7494f0b74 Mon Sep 17 00:00:00 2001 From: "Michael S. Tsirkin" Date: Fri, 20 Jul 2012 09:23:17 +0000 Subject: [PATCH] --- yaml --- r: 315783 b: refs/heads/master c: 1080e512d44d4f67b8beb8edf25a1bbcb1066dc7 h: refs/heads/master i: 315781: 77556b9f520c65e1821f1cc50ec7e0d787803f80 315779: e86005334d59e9e41d53afd56d1750d7ca7fe339 315775: c209776d604d9555fe32aee6fee64df673f328bc v: v3 --- [refs] | 2 +- trunk/net/core/dev.c | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) 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);