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 820bac239738..6666b28b6815 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1766,19 +1766,14 @@ EXPORT_SYMBOL_GPL(is_skb_forwardable);
1766 1766
1767int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb) 1767int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb)
1768{ 1768{
1769 if (skb_orphan_frags(skb, GFP_ATOMIC) || 1769 int ret = ____dev_forward_skb(dev, skb);
1770 unlikely(!is_skb_forwardable(dev, skb))) {
1771 atomic_long_inc(&dev->rx_dropped);
1772 kfree_skb(skb);
1773 return NET_RX_DROP;
1774 }
1775 1770
1776 skb_scrub_packet(skb, true); 1771 if (likely(!ret)) {
1777 skb->priority = 0; 1772 skb->protocol = eth_type_trans(skb, dev);
1778 skb->protocol = eth_type_trans(skb, dev); 1773 skb_postpull_rcsum(skb, eth_hdr(skb), ETH_HLEN);
1779 skb_postpull_rcsum(skb, eth_hdr(skb), ETH_HLEN); 1774 }
1780 1775
1781 return 0; 1776 return ret;
1782} 1777}
1783EXPORT_SYMBOL_GPL(__dev_forward_skb); 1778EXPORT_SYMBOL_GPL(__dev_forward_skb);
1784 1779
@@ -2484,7 +2479,7 @@ int skb_checksum_help(struct sk_buff *skb)
2484 goto out; 2479 goto out;
2485 } 2480 }
2486 2481
2487 *(__sum16 *)(skb->data + offset) = csum_fold(csum); 2482 *(__sum16 *)(skb->data + offset) = csum_fold(csum) ?: CSUM_MANGLED_0;
2488out_set_summed: 2483out_set_summed:
2489 skb->ip_summed = CHECKSUM_NONE; 2484 skb->ip_summed = CHECKSUM_NONE;
2490out: 2485out: