aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/dev.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-06-29 17:30:07 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-06-29 17:30:07 -0400
commit4d8a991d460d4fa4829beaffdcba45a217ca0fa7 (patch)
tree51edc7b944c963780f75a0475683a6fb188c5199 /net/core/dev.c
parent27bc344014289a298a9fad4b828fcf61daa60aff (diff)
parentd58299a478c416c0b48e4b31c6332fe7beb63000 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: 1) Need to access netdev->num_rx_queues behind an accessor in netvsc driver otherwise the build breaks with some configs, from Arnd Bergmann. 2) Add dummy xfrm_dev_event() so that build doesn't fail when CONFIG_XFRM_OFFLOAD is not set. From Hangbin Liu. 3) Don't OOPS when pfkey_msg2xfrm_state() signals an erros, from Dan Carpenter. 4) Fix MCDI command size for filter operations in sfc driver, from Martin Habets. 5) Fix UFO segmenting so that we don't calculate incorrect checksums, from Michal Kubecek. 6) When ipv6 datagram connects fail, reset destination address and port. From Wei Wang. 7) TCP disconnect must reset the cached receive DST, from WANG Cong. 8) Fix sign extension bug on 32-bit in dev_get_stats(), from Eric Dumazet. 9) fman driver has to depend on HAS_DMA, from Madalin Bucur. 10) Fix bpf pointer leak with xadd in verifier, from Daniel Borkmann. 11) Fix negative page counts with GFO, from Michal Kubecek. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (41 commits) sfc: fix attempt to translate invalid filter ID net: handle NAPI_GRO_FREE_STOLEN_HEAD case also in napi_frags_finish() bpf: prevent leaking pointer via xadd on unpriviledged arcnet: com20020-pci: add missing pdev setup in netdev structure arcnet: com20020-pci: fix dev_id calculation arcnet: com20020: remove needless base_addr assignment Trivial fix to spelling mistake in arc_printk message arcnet: change irq handler to lock irqsave rocker: move dereference before free mlxsw: spectrum_router: Fix NULL pointer dereference net: sched: Fix one possible panic when no destroy callback virtio-net: serialize tx routine during reset net: usb: asix88179_178a: Add support for the Belkin B2B128 fsl/fman: add dependency on HAS_DMA net: prevent sign extension in dev_get_stats() tcp: reset sk_rx_dst in tcp_disconnect() net: ipv6: reset daddr and dport in sk if connect() fails bnx2x: Don't log mc removal needlessly bnxt_en: Fix netpoll handling. bnxt_en: Add missing logic to handle TPA end error conditions. ...
Diffstat (limited to 'net/core/dev.c')
-rw-r--r--net/core/dev.c30
1 files changed, 20 insertions, 10 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index 7243421c9783..416137c64bf8 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4767,6 +4767,13 @@ struct packet_offload *gro_find_complete_by_type(__be16 type)
4767} 4767}
4768EXPORT_SYMBOL(gro_find_complete_by_type); 4768EXPORT_SYMBOL(gro_find_complete_by_type);
4769 4769
4770static void napi_skb_free_stolen_head(struct sk_buff *skb)
4771{
4772 skb_dst_drop(skb);
4773 secpath_reset(skb);
4774 kmem_cache_free(skbuff_head_cache, skb);
4775}
4776
4770static gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb) 4777static gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb)
4771{ 4778{
4772 switch (ret) { 4779 switch (ret) {
@@ -4780,13 +4787,10 @@ static gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb)
4780 break; 4787 break;
4781 4788
4782 case GRO_MERGED_FREE: 4789 case GRO_MERGED_FREE:
4783 if (NAPI_GRO_CB(skb)->free == NAPI_GRO_FREE_STOLEN_HEAD) { 4790 if (NAPI_GRO_CB(skb)->free == NAPI_GRO_FREE_STOLEN_HEAD)
4784 skb_dst_drop(skb); 4791 napi_skb_free_stolen_head(skb);
4785 secpath_reset(skb); 4792 else
4786 kmem_cache_free(skbuff_head_cache, skb);
4787 } else {
4788 __kfree_skb(skb); 4793 __kfree_skb(skb);
4789 }
4790 break; 4794 break;
4791 4795
4792 case GRO_HELD: 4796 case GRO_HELD:
@@ -4858,10 +4862,16 @@ static gro_result_t napi_frags_finish(struct napi_struct *napi,
4858 break; 4862 break;
4859 4863
4860 case GRO_DROP: 4864 case GRO_DROP:
4861 case GRO_MERGED_FREE:
4862 napi_reuse_skb(napi, skb); 4865 napi_reuse_skb(napi, skb);
4863 break; 4866 break;
4864 4867
4868 case GRO_MERGED_FREE:
4869 if (NAPI_GRO_CB(skb)->free == NAPI_GRO_FREE_STOLEN_HEAD)
4870 napi_skb_free_stolen_head(skb);
4871 else
4872 napi_reuse_skb(napi, skb);
4873 break;
4874
4865 case GRO_MERGED: 4875 case GRO_MERGED:
4866 case GRO_CONSUMED: 4876 case GRO_CONSUMED:
4867 break; 4877 break;
@@ -7783,9 +7793,9 @@ struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev,
7783 } else { 7793 } else {
7784 netdev_stats_to_stats64(storage, &dev->stats); 7794 netdev_stats_to_stats64(storage, &dev->stats);
7785 } 7795 }
7786 storage->rx_dropped += atomic_long_read(&dev->rx_dropped); 7796 storage->rx_dropped += (unsigned long)atomic_long_read(&dev->rx_dropped);
7787 storage->tx_dropped += atomic_long_read(&dev->tx_dropped); 7797 storage->tx_dropped += (unsigned long)atomic_long_read(&dev->tx_dropped);
7788 storage->rx_nohandler += atomic_long_read(&dev->rx_nohandler); 7798 storage->rx_nohandler += (unsigned long)atomic_long_read(&dev->rx_nohandler);
7789 return storage; 7799 return storage;
7790} 7800}
7791EXPORT_SYMBOL(dev_get_stats); 7801EXPORT_SYMBOL(dev_get_stats);