From de9e8f3f4086b1e6ba302487074fb707f1a95fc7 Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Sat, 7 Sep 2013 12:27:11 +1000 Subject: [PATCH] macvlan: Move skb_clone check closer to call Currently macvlan calls skb_clone in macvlan_broadcast but checks for a NULL return in macvlan_broadcast_one instead. This is needlessly confusing and may lead to bugs introduced later. This patch moves the error check to where the skb_clone call is. The only other caller of macvlan_broadcast_one never passes in a NULL value so it doesn't need the check either. Signed-off-by: Herbert Xu Thanks, Reviewed-by: Simon Horman Signed-off-by: David S. Miller --- drivers/net/macvlan.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 64dfaa303dcc..9bf46bd19b87 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c @@ -118,8 +118,6 @@ static int macvlan_broadcast_one(struct sk_buff *skb, const struct ethhdr *eth, bool local) { struct net_device *dev = vlan->dev; - if (!skb) - return NET_RX_DROP; if (local) return vlan->forward(dev, skb); @@ -171,9 +169,13 @@ static void macvlan_broadcast(struct sk_buff *skb, hash = mc_hash(vlan, eth->h_dest); if (!test_bit(hash, vlan->mc_filter)) continue; + + err = NET_RX_DROP; nskb = skb_clone(skb, GFP_ATOMIC); - err = macvlan_broadcast_one(nskb, vlan, eth, - mode == MACVLAN_MODE_BRIDGE); + if (likely(nskb)) + err = macvlan_broadcast_one( + nskb, vlan, eth, + mode == MACVLAN_MODE_BRIDGE); macvlan_count_rx(vlan, skb->len + ETH_HLEN, err == NET_RX_SUCCESS, 1); } -- 2.39.5