diff options
Diffstat (limited to 'net/core/dev.c')
| -rw-r--r-- | net/core/dev.c | 19 | 
1 files changed, 7 insertions, 12 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 820bac239738..6666b28b6815 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1766,19 +1766,14 @@ EXPORT_SYMBOL_GPL(is_skb_forwardable);  int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb)  { -	if (skb_orphan_frags(skb, GFP_ATOMIC) || -	    unlikely(!is_skb_forwardable(dev, skb))) { -		atomic_long_inc(&dev->rx_dropped); -		kfree_skb(skb); -		return NET_RX_DROP; -	} +	int ret = ____dev_forward_skb(dev, skb); -	skb_scrub_packet(skb, true); -	skb->priority = 0; -	skb->protocol = eth_type_trans(skb, dev); -	skb_postpull_rcsum(skb, eth_hdr(skb), ETH_HLEN); +	if (likely(!ret)) { +		skb->protocol = eth_type_trans(skb, dev); +		skb_postpull_rcsum(skb, eth_hdr(skb), ETH_HLEN); +	} -	return 0; +	return ret;  }  EXPORT_SYMBOL_GPL(__dev_forward_skb); @@ -2484,7 +2479,7 @@ int skb_checksum_help(struct sk_buff *skb)  			goto out;  	} -	*(__sum16 *)(skb->data + offset) = csum_fold(csum); +	*(__sum16 *)(skb->data + offset) = csum_fold(csum) ?: CSUM_MANGLED_0;  out_set_summed:  	skb->ip_summed = CHECKSUM_NONE;  out:  | 
