aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/core/dev.c')
-rw-r--r--net/core/dev.c19
1 files changed, 7 insertions, 12 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index 7385c1a152fd..6deba68ad9e4 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1765,19 +1765,14 @@ EXPORT_SYMBOL_GPL(is_skb_forwardable);
1765 1765
1766int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb) 1766int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb)
1767{ 1767{
1768 if (skb_orphan_frags(skb, GFP_ATOMIC) || 1768 int ret = ____dev_forward_skb(dev, skb);
1769 unlikely(!is_skb_forwardable(dev, skb))) {
1770 atomic_long_inc(&dev->rx_dropped);
1771 kfree_skb(skb);
1772 return NET_RX_DROP;
1773 }
1774 1769
1775 skb_scrub_packet(skb, true); 1770 if (likely(!ret)) {
1776 skb->priority = 0; 1771 skb->protocol = eth_type_trans(skb, dev);
1777 skb->protocol = eth_type_trans(skb, dev); 1772 skb_postpull_rcsum(skb, eth_hdr(skb), ETH_HLEN);
1778 skb_postpull_rcsum(skb, eth_hdr(skb), ETH_HLEN); 1773 }
1779 1774
1780 return 0; 1775 return ret;
1781} 1776}
1782EXPORT_SYMBOL_GPL(__dev_forward_skb); 1777EXPORT_SYMBOL_GPL(__dev_forward_skb);
1783 1778
@@ -2599,7 +2594,7 @@ int skb_checksum_help(struct sk_buff *skb)
2599 goto out; 2594 goto out;
2600 } 2595 }
2601 2596
2602 *(__sum16 *)(skb->data + offset) = csum_fold(csum); 2597 *(__sum16 *)(skb->data + offset) = csum_fold(csum) ?: CSUM_MANGLED_0;
2603out_set_summed: 2598out_set_summed:
2604 skb->ip_summed = CHECKSUM_NONE; 2599 skb->ip_summed = CHECKSUM_NONE;
2605out: 2600out: