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 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 | ||
1766 | int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb) | 1766 | int __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 | } |
1782 | EXPORT_SYMBOL_GPL(__dev_forward_skb); | 1777 | EXPORT_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; |
2603 | out_set_summed: | 2598 | out_set_summed: |
2604 | skb->ip_summed = CHECKSUM_NONE; | 2599 | skb->ip_summed = CHECKSUM_NONE; |
2605 | out: | 2600 | out: |