diff options
Diffstat (limited to 'net/bridge/br_device.c')
| -rw-r--r-- | net/bridge/br_device.c | 6 | 
1 files changed, 6 insertions, 0 deletions
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c index 71b50001ca58..fb1115857e49 100644 --- a/net/bridge/br_device.c +++ b/net/bridge/br_device.c @@ -27,6 +27,7 @@ EXPORT_SYMBOL_GPL(nf_br_ops);  /* net device transmit always called with BH disabled */  netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev)  { +	enum skb_drop_reason reason = pskb_may_pull_reason(skb, ETH_HLEN);  	struct net_bridge_mcast_port *pmctx_null = NULL;  	struct net_bridge *br = netdev_priv(dev);  	struct net_bridge_mcast *brmctx = &br->multicast_ctx; @@ -38,6 +39,11 @@ netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev)  	const unsigned char *dest;  	u16 vid = 0; +	if (unlikely(reason != SKB_NOT_DROPPED_YET)) { +		kfree_skb_reason(skb, reason); +		return NETDEV_TX_OK; +	} +  	memset(skb->cb, 0, sizeof(struct br_input_skb_cb));  	br_tc_skb_miss_set(skb, false);  | 
