summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-10-05 11:50:15 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-10-05 11:50:15 -0400
commit9819a30c11ea439e5e3c81f5539c4d42d6c76314 (patch)
treeeee29b4735a2ddb944260ad3d281efd4a56788cc
parent6fe137cbe3e85e832a169006e8ccc04cec69c653 (diff)
parentef129d34149ea23d0d442844fc25ae26a85589fc (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from David Miller: 1) Fix ieeeu02154 atusb driver use-after-free, from Johan Hovold. 2) Need to validate TCA_CBQ_WRROPT netlink attributes, from Eric Dumazet. 3) txq null deref in mac80211, from Miaoqing Pan. 4) ionic driver needs to select NET_DEVLINK, from Arnd Bergmann. 5) Need to disable bh during nft_connlimit GC, from Pablo Neira Ayuso. 6) Avoid division by zero in taprio scheduler, from Vladimir Oltean. 7) Various xgmac fixes in stmmac driver from Jose Abreu. 8) Avoid 64-bit division in mlx5 leading to link errors on 32-bit from Michal Kubecek. 9) Fix bad VLAN check in rtl8366 DSA driver, from Linus Walleij. 10) Fix sleep while atomic in sja1105, from Vladimir Oltean. 11) Suspend/resume deadlock in stmmac, from Thierry Reding. 12) Various UDP GSO fixes from Josh Hunt. 13) Fix slab out of bounds access in tcp_zerocopy_receive(), from Eric Dumazet. 14) Fix OOPS in __ipv6_ifa_notify(), from David Ahern. 15) Memory leak in NFC's llcp_sock_bind, from Eric Dumazet. * git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (72 commits) selftests/net: add nettest to .gitignore net: qlogic: Fix memory leak in ql_alloc_large_buffers nfc: fix memory leak in llcp_sock_bind() sch_dsmark: fix potential NULL deref in dsmark_init() net: phy: at803x: use operating parameters from PHY-specific status net: phy: extract pause mode net: phy: extract link partner advertisement reading net: phy: fix write to mii-ctrl1000 register ipv6: Handle missing host route in __ipv6_ifa_notify net: phy: allow for reset line to be tied to a sleepy GPIO controller net: ipv4: avoid mixed n_redirects and rate_tokens usage r8152: Set macpassthru in reset_resume callback cxgb4:Fix out-of-bounds MSI-X info array access Revert "ipv6: Handle race in addrconf_dad_work" net: make sock_prot_memory_pressure() return "const char *" rxrpc: Fix rxrpc_recvmsg tracepoint qmi_wwan: add support for Cinterion CLS8 devices tcp: fix slab-out-of-bounds in tcp_zerocopy_receive() lib: textsearch: fix escapes in example code udp: only do GSO if # of segs > 1 ...
-rw-r--r--Documentation/networking/device_drivers/index.rst1
-rw-r--r--Documentation/networking/j1939.rst2
-rw-r--r--drivers/net/dsa/qca8k.c4
-rw-r--r--drivers/net/dsa/rtl8366.c11
-rw-r--r--drivers/net/dsa/rtl8366rb.c16
-rw-r--r--drivers/net/dsa/sja1105/sja1105_main.c24
-rw-r--r--drivers/net/dsa/sja1105/sja1105_spi.c6
-rw-r--r--drivers/net/ethernet/atheros/ag71xx.c6
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c9
-rw-r--r--drivers/net/ethernet/hisilicon/hns_mdio.c6
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c3
-rw-r--r--drivers/net/ethernet/mscc/ocelot_board.c14
-rw-r--r--drivers/net/ethernet/pensando/Kconfig1
-rw-r--r--drivers/net/ethernet/qlogic/qla3xxx.c1
-rw-r--r--drivers/net/ethernet/socionext/netsec.c30
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c13
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h3
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c9
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c1
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_main.c25
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c4
-rw-r--r--drivers/net/ieee802154/atusb.c3
-rw-r--r--drivers/net/ieee802154/ca8210.c2
-rw-r--r--drivers/net/ieee802154/mcr20a.c2
-rw-r--r--drivers/net/phy/at803x.c69
-rw-r--r--drivers/net/phy/mdio_device.c2
-rw-r--r--drivers/net/phy/phy-core.c20
-rw-r--r--drivers/net/phy/phy.c5
-rw-r--r--drivers/net/phy/phy_device.c65
-rw-r--r--drivers/net/ppp/pptp.c4
-rw-r--r--drivers/net/tun.c2
-rw-r--r--drivers/net/usb/hso.c12
-rw-r--r--drivers/net/usb/qmi_wwan.c1
-rw-r--r--drivers/net/usb/r8152.c3
-rw-r--r--drivers/net/virtio_net.c2
-rw-r--r--drivers/net/vrf.c8
-rw-r--r--drivers/net/wireless/mac80211_hwsim.c4
-rw-r--r--drivers/net/xen-netfront.c17
-rw-r--r--drivers/ptp/ptp_qoriq.c3
-rw-r--r--drivers/staging/octeon/ethernet-tx.c6
-rw-r--r--include/linux/dsa/sja1105.h4
-rw-r--r--include/linux/mii.h9
-rw-r--r--include/linux/phy.h2
-rw-r--r--include/linux/skbuff.h5
-rw-r--r--include/trace/events/rxrpc.h2
-rw-r--r--lib/textsearch.c4
-rw-r--r--net/batman-adv/soft-interface.c2
-rw-r--r--net/core/devlink.c6
-rw-r--r--net/core/skbuff.c2
-rw-r--r--net/core/sock.c13
-rw-r--r--net/dccp/ipv4.c2
-rw-r--r--net/dsa/tag_sja1105.c12
-rw-r--r--net/ipv4/ip_gre.c1
-rw-r--r--net/ipv4/ip_input.c2
-rw-r--r--net/ipv4/ipmr.c4
-rw-r--r--net/ipv4/netfilter/nf_dup_ipv4.c2
-rw-r--r--net/ipv4/raw.c2
-rw-r--r--net/ipv4/route.c5
-rw-r--r--net/ipv4/tcp.c6
-rw-r--r--net/ipv4/tcp_ipv4.c2
-rw-r--r--net/ipv4/tcp_timer.c9
-rw-r--r--net/ipv4/udp.c15
-rw-r--r--net/ipv6/addrconf.c17
-rw-r--r--net/ipv6/ip6_input.c12
-rw-r--r--net/ipv6/netfilter/nf_dup_ipv6.c2
-rw-r--r--net/ipv6/raw.c2
-rw-r--r--net/ipv6/udp.c9
-rw-r--r--net/l2tp/l2tp_core.c2
-rw-r--r--net/l2tp/l2tp_eth.c2
-rw-r--r--net/l2tp/l2tp_ip.c2
-rw-r--r--net/l2tp/l2tp_ip6.c2
-rw-r--r--net/mac80211/debugfs_netdev.c11
-rw-r--r--net/mac80211/util.c13
-rw-r--r--net/netfilter/ipvs/ip_vs_xmit.c2
-rw-r--r--net/netfilter/nft_connlimit.c7
-rw-r--r--net/nfc/llcp_sock.c7
-rw-r--r--net/openvswitch/vport-internal_dev.c2
-rw-r--r--net/packet/af_packet.c4
-rw-r--r--net/rds/ib.c6
-rw-r--r--net/sched/sch_cbq.c43
-rw-r--r--net/sched/sch_cbs.c2
-rw-r--r--net/sched/sch_dsmark.c2
-rw-r--r--net/sched/sch_taprio.c5
-rw-r--r--net/sctp/input.c2
-rw-r--r--net/tipc/link.c29
-rw-r--r--net/tipc/msg.c5
-rw-r--r--net/vmw_vsock/af_vsock.c16
-rw-r--r--net/vmw_vsock/hyperv_transport.c2
-rw-r--r--net/vmw_vsock/virtio_transport_common.c2
-rw-r--r--net/wireless/nl80211.c44
-rw-r--r--net/wireless/reg.c2
-rw-r--r--net/wireless/scan.c7
-rw-r--r--net/wireless/wext-compat.c2
-rw-r--r--net/xfrm/xfrm_input.c2
-rw-r--r--net/xfrm/xfrm_interface.c2
-rw-r--r--net/xfrm/xfrm_output.c2
-rw-r--r--net/xfrm/xfrm_policy.c2
-rw-r--r--tools/testing/selftests/net/.gitignore1
-rw-r--r--tools/testing/selftests/net/udpgso.c16
99 files changed, 539 insertions, 281 deletions
diff --git a/Documentation/networking/device_drivers/index.rst b/Documentation/networking/device_drivers/index.rst
index f51f92571e39..c1f7f75e5fd9 100644
--- a/Documentation/networking/device_drivers/index.rst
+++ b/Documentation/networking/device_drivers/index.rst
@@ -23,6 +23,7 @@ Contents:
23 intel/ice 23 intel/ice
24 google/gve 24 google/gve
25 mellanox/mlx5 25 mellanox/mlx5
26 netronome/nfp
26 pensando/ionic 27 pensando/ionic
27 28
28.. only:: subproject and html 29.. only:: subproject and html
diff --git a/Documentation/networking/j1939.rst b/Documentation/networking/j1939.rst
index ce7e7a044e08..dc60b13fcd09 100644
--- a/Documentation/networking/j1939.rst
+++ b/Documentation/networking/j1939.rst
@@ -272,7 +272,7 @@ supported flags are:
272* MSG_DONTWAIT, i.e. non-blocking operation. 272* MSG_DONTWAIT, i.e. non-blocking operation.
273 273
274recvmsg(2) 274recvmsg(2)
275^^^^^^^^^ 275^^^^^^^^^^
276 276
277In most cases recvmsg(2) is needed if you want to extract more information than 277In most cases recvmsg(2) is needed if you want to extract more information than
278recvfrom(2) can provide. For example package priority and timestamp. The 278recvfrom(2) can provide. For example package priority and timestamp. The
diff --git a/drivers/net/dsa/qca8k.c b/drivers/net/dsa/qca8k.c
index 684aa51684db..b00274caae4f 100644
--- a/drivers/net/dsa/qca8k.c
+++ b/drivers/net/dsa/qca8k.c
@@ -705,7 +705,7 @@ qca8k_setup(struct dsa_switch *ds)
705 BIT(0) << QCA8K_GLOBAL_FW_CTRL1_UC_DP_S); 705 BIT(0) << QCA8K_GLOBAL_FW_CTRL1_UC_DP_S);
706 706
707 /* Setup connection between CPU port & user ports */ 707 /* Setup connection between CPU port & user ports */
708 for (i = 0; i < DSA_MAX_PORTS; i++) { 708 for (i = 0; i < QCA8K_NUM_PORTS; i++) {
709 /* CPU port gets connected to all user ports of the switch */ 709 /* CPU port gets connected to all user ports of the switch */
710 if (dsa_is_cpu_port(ds, i)) { 710 if (dsa_is_cpu_port(ds, i)) {
711 qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(QCA8K_CPU_PORT), 711 qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(QCA8K_CPU_PORT),
@@ -1077,7 +1077,7 @@ qca8k_sw_probe(struct mdio_device *mdiodev)
1077 if (id != QCA8K_ID_QCA8337) 1077 if (id != QCA8K_ID_QCA8337)
1078 return -ENODEV; 1078 return -ENODEV;
1079 1079
1080 priv->ds = dsa_switch_alloc(&mdiodev->dev, DSA_MAX_PORTS); 1080 priv->ds = dsa_switch_alloc(&mdiodev->dev, QCA8K_NUM_PORTS);
1081 if (!priv->ds) 1081 if (!priv->ds)
1082 return -ENOMEM; 1082 return -ENOMEM;
1083 1083
diff --git a/drivers/net/dsa/rtl8366.c b/drivers/net/dsa/rtl8366.c
index ca3d17e43ed8..ac88caca5ad4 100644
--- a/drivers/net/dsa/rtl8366.c
+++ b/drivers/net/dsa/rtl8366.c
@@ -339,10 +339,12 @@ int rtl8366_vlan_prepare(struct dsa_switch *ds, int port,
339 const struct switchdev_obj_port_vlan *vlan) 339 const struct switchdev_obj_port_vlan *vlan)
340{ 340{
341 struct realtek_smi *smi = ds->priv; 341 struct realtek_smi *smi = ds->priv;
342 u16 vid;
342 int ret; 343 int ret;
343 344
344 if (!smi->ops->is_vlan_valid(smi, port)) 345 for (vid = vlan->vid_begin; vid < vlan->vid_end; vid++)
345 return -EINVAL; 346 if (!smi->ops->is_vlan_valid(smi, vid))
347 return -EINVAL;
346 348
347 dev_info(smi->dev, "prepare VLANs %04x..%04x\n", 349 dev_info(smi->dev, "prepare VLANs %04x..%04x\n",
348 vlan->vid_begin, vlan->vid_end); 350 vlan->vid_begin, vlan->vid_end);
@@ -370,8 +372,9 @@ void rtl8366_vlan_add(struct dsa_switch *ds, int port,
370 u16 vid; 372 u16 vid;
371 int ret; 373 int ret;
372 374
373 if (!smi->ops->is_vlan_valid(smi, port)) 375 for (vid = vlan->vid_begin; vid < vlan->vid_end; vid++)
374 return; 376 if (!smi->ops->is_vlan_valid(smi, vid))
377 return;
375 378
376 dev_info(smi->dev, "add VLAN on port %d, %s, %s\n", 379 dev_info(smi->dev, "add VLAN on port %d, %s, %s\n",
377 port, 380 port,
diff --git a/drivers/net/dsa/rtl8366rb.c b/drivers/net/dsa/rtl8366rb.c
index a268085ffad2..f5cc8b0a7c74 100644
--- a/drivers/net/dsa/rtl8366rb.c
+++ b/drivers/net/dsa/rtl8366rb.c
@@ -507,7 +507,8 @@ static int rtl8366rb_setup_cascaded_irq(struct realtek_smi *smi)
507 irq = of_irq_get(intc, 0); 507 irq = of_irq_get(intc, 0);
508 if (irq <= 0) { 508 if (irq <= 0) {
509 dev_err(smi->dev, "failed to get parent IRQ\n"); 509 dev_err(smi->dev, "failed to get parent IRQ\n");
510 return irq ? irq : -EINVAL; 510 ret = irq ? irq : -EINVAL;
511 goto out_put_node;
511 } 512 }
512 513
513 /* This clears the IRQ status register */ 514 /* This clears the IRQ status register */
@@ -515,7 +516,7 @@ static int rtl8366rb_setup_cascaded_irq(struct realtek_smi *smi)
515 &val); 516 &val);
516 if (ret) { 517 if (ret) {
517 dev_err(smi->dev, "can't read interrupt status\n"); 518 dev_err(smi->dev, "can't read interrupt status\n");
518 return ret; 519 goto out_put_node;
519 } 520 }
520 521
521 /* Fetch IRQ edge information from the descriptor */ 522 /* Fetch IRQ edge information from the descriptor */
@@ -537,7 +538,7 @@ static int rtl8366rb_setup_cascaded_irq(struct realtek_smi *smi)
537 val); 538 val);
538 if (ret) { 539 if (ret) {
539 dev_err(smi->dev, "could not configure IRQ polarity\n"); 540 dev_err(smi->dev, "could not configure IRQ polarity\n");
540 return ret; 541 goto out_put_node;
541 } 542 }
542 543
543 ret = devm_request_threaded_irq(smi->dev, irq, NULL, 544 ret = devm_request_threaded_irq(smi->dev, irq, NULL,
@@ -545,7 +546,7 @@ static int rtl8366rb_setup_cascaded_irq(struct realtek_smi *smi)
545 "RTL8366RB", smi); 546 "RTL8366RB", smi);
546 if (ret) { 547 if (ret) {
547 dev_err(smi->dev, "unable to request irq: %d\n", ret); 548 dev_err(smi->dev, "unable to request irq: %d\n", ret);
548 return ret; 549 goto out_put_node;
549 } 550 }
550 smi->irqdomain = irq_domain_add_linear(intc, 551 smi->irqdomain = irq_domain_add_linear(intc,
551 RTL8366RB_NUM_INTERRUPT, 552 RTL8366RB_NUM_INTERRUPT,
@@ -553,12 +554,15 @@ static int rtl8366rb_setup_cascaded_irq(struct realtek_smi *smi)
553 smi); 554 smi);
554 if (!smi->irqdomain) { 555 if (!smi->irqdomain) {
555 dev_err(smi->dev, "failed to create IRQ domain\n"); 556 dev_err(smi->dev, "failed to create IRQ domain\n");
556 return -EINVAL; 557 ret = -EINVAL;
558 goto out_put_node;
557 } 559 }
558 for (i = 0; i < smi->num_ports; i++) 560 for (i = 0; i < smi->num_ports; i++)
559 irq_set_parent(irq_create_mapping(smi->irqdomain, i), irq); 561 irq_set_parent(irq_create_mapping(smi->irqdomain, i), irq);
560 562
561 return 0; 563out_put_node:
564 of_node_put(intc);
565 return ret;
562} 566}
563 567
564static int rtl8366rb_set_addr(struct realtek_smi *smi) 568static int rtl8366rb_set_addr(struct realtek_smi *smi)
diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c
index b9def744bcb3..7687ddcae159 100644
--- a/drivers/net/dsa/sja1105/sja1105_main.c
+++ b/drivers/net/dsa/sja1105/sja1105_main.c
@@ -1897,7 +1897,9 @@ static int sja1105_set_ageing_time(struct dsa_switch *ds,
1897 return sja1105_static_config_reload(priv); 1897 return sja1105_static_config_reload(priv);
1898} 1898}
1899 1899
1900/* Caller must hold priv->tagger_data.meta_lock */ 1900/* Must be called only with priv->tagger_data.state bit
1901 * SJA1105_HWTS_RX_EN cleared
1902 */
1901static int sja1105_change_rxtstamping(struct sja1105_private *priv, 1903static int sja1105_change_rxtstamping(struct sja1105_private *priv,
1902 bool on) 1904 bool on)
1903{ 1905{
@@ -1954,16 +1956,17 @@ static int sja1105_hwtstamp_set(struct dsa_switch *ds, int port,
1954 break; 1956 break;
1955 } 1957 }
1956 1958
1957 if (rx_on != priv->tagger_data.hwts_rx_en) { 1959 if (rx_on != test_bit(SJA1105_HWTS_RX_EN, &priv->tagger_data.state)) {
1958 spin_lock(&priv->tagger_data.meta_lock); 1960 clear_bit(SJA1105_HWTS_RX_EN, &priv->tagger_data.state);
1961
1959 rc = sja1105_change_rxtstamping(priv, rx_on); 1962 rc = sja1105_change_rxtstamping(priv, rx_on);
1960 spin_unlock(&priv->tagger_data.meta_lock);
1961 if (rc < 0) { 1963 if (rc < 0) {
1962 dev_err(ds->dev, 1964 dev_err(ds->dev,
1963 "Failed to change RX timestamping: %d\n", rc); 1965 "Failed to change RX timestamping: %d\n", rc);
1964 return -EFAULT; 1966 return rc;
1965 } 1967 }
1966 priv->tagger_data.hwts_rx_en = rx_on; 1968 if (rx_on)
1969 set_bit(SJA1105_HWTS_RX_EN, &priv->tagger_data.state);
1967 } 1970 }
1968 1971
1969 if (copy_to_user(ifr->ifr_data, &config, sizeof(config))) 1972 if (copy_to_user(ifr->ifr_data, &config, sizeof(config)))
@@ -1982,7 +1985,7 @@ static int sja1105_hwtstamp_get(struct dsa_switch *ds, int port,
1982 config.tx_type = HWTSTAMP_TX_ON; 1985 config.tx_type = HWTSTAMP_TX_ON;
1983 else 1986 else
1984 config.tx_type = HWTSTAMP_TX_OFF; 1987 config.tx_type = HWTSTAMP_TX_OFF;
1985 if (priv->tagger_data.hwts_rx_en) 1988 if (test_bit(SJA1105_HWTS_RX_EN, &priv->tagger_data.state))
1986 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT; 1989 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
1987 else 1990 else
1988 config.rx_filter = HWTSTAMP_FILTER_NONE; 1991 config.rx_filter = HWTSTAMP_FILTER_NONE;
@@ -2005,12 +2008,12 @@ static void sja1105_rxtstamp_work(struct work_struct *work)
2005 2008
2006 mutex_lock(&priv->ptp_lock); 2009 mutex_lock(&priv->ptp_lock);
2007 2010
2008 now = priv->tstamp_cc.read(&priv->tstamp_cc);
2009
2010 while ((skb = skb_dequeue(&data->skb_rxtstamp_queue)) != NULL) { 2011 while ((skb = skb_dequeue(&data->skb_rxtstamp_queue)) != NULL) {
2011 struct skb_shared_hwtstamps *shwt = skb_hwtstamps(skb); 2012 struct skb_shared_hwtstamps *shwt = skb_hwtstamps(skb);
2012 u64 ts; 2013 u64 ts;
2013 2014
2015 now = priv->tstamp_cc.read(&priv->tstamp_cc);
2016
2014 *shwt = (struct skb_shared_hwtstamps) {0}; 2017 *shwt = (struct skb_shared_hwtstamps) {0};
2015 2018
2016 ts = SJA1105_SKB_CB(skb)->meta_tstamp; 2019 ts = SJA1105_SKB_CB(skb)->meta_tstamp;
@@ -2031,7 +2034,7 @@ static bool sja1105_port_rxtstamp(struct dsa_switch *ds, int port,
2031 struct sja1105_private *priv = ds->priv; 2034 struct sja1105_private *priv = ds->priv;
2032 struct sja1105_tagger_data *data = &priv->tagger_data; 2035 struct sja1105_tagger_data *data = &priv->tagger_data;
2033 2036
2034 if (!data->hwts_rx_en) 2037 if (!test_bit(SJA1105_HWTS_RX_EN, &data->state))
2035 return false; 2038 return false;
2036 2039
2037 /* We need to read the full PTP clock to reconstruct the Rx 2040 /* We need to read the full PTP clock to reconstruct the Rx
@@ -2201,6 +2204,7 @@ static int sja1105_probe(struct spi_device *spi)
2201 tagger_data = &priv->tagger_data; 2204 tagger_data = &priv->tagger_data;
2202 skb_queue_head_init(&tagger_data->skb_rxtstamp_queue); 2205 skb_queue_head_init(&tagger_data->skb_rxtstamp_queue);
2203 INIT_WORK(&tagger_data->rxtstamp_work, sja1105_rxtstamp_work); 2206 INIT_WORK(&tagger_data->rxtstamp_work, sja1105_rxtstamp_work);
2207 spin_lock_init(&tagger_data->meta_lock);
2204 2208
2205 /* Connections between dsa_port and sja1105_port */ 2209 /* Connections between dsa_port and sja1105_port */
2206 for (i = 0; i < SJA1105_NUM_PORTS; i++) { 2210 for (i = 0; i < SJA1105_NUM_PORTS; i++) {
diff --git a/drivers/net/dsa/sja1105/sja1105_spi.c b/drivers/net/dsa/sja1105/sja1105_spi.c
index 84dc603138cf..58dd37ecde17 100644
--- a/drivers/net/dsa/sja1105/sja1105_spi.c
+++ b/drivers/net/dsa/sja1105/sja1105_spi.c
@@ -409,7 +409,8 @@ int sja1105_static_config_upload(struct sja1105_private *priv)
409 rc = static_config_buf_prepare_for_upload(priv, config_buf, buf_len); 409 rc = static_config_buf_prepare_for_upload(priv, config_buf, buf_len);
410 if (rc < 0) { 410 if (rc < 0) {
411 dev_err(dev, "Invalid config, cannot upload\n"); 411 dev_err(dev, "Invalid config, cannot upload\n");
412 return -EINVAL; 412 rc = -EINVAL;
413 goto out;
413 } 414 }
414 /* Prevent PHY jabbering during switch reset by inhibiting 415 /* Prevent PHY jabbering during switch reset by inhibiting
415 * Tx on all ports and waiting for current packet to drain. 416 * Tx on all ports and waiting for current packet to drain.
@@ -418,7 +419,8 @@ int sja1105_static_config_upload(struct sja1105_private *priv)
418 rc = sja1105_inhibit_tx(priv, port_bitmap, true); 419 rc = sja1105_inhibit_tx(priv, port_bitmap, true);
419 if (rc < 0) { 420 if (rc < 0) {
420 dev_err(dev, "Failed to inhibit Tx on ports\n"); 421 dev_err(dev, "Failed to inhibit Tx on ports\n");
421 return -ENXIO; 422 rc = -ENXIO;
423 goto out;
422 } 424 }
423 /* Wait for an eventual egress packet to finish transmission 425 /* Wait for an eventual egress packet to finish transmission
424 * (reach IFG). It is guaranteed that a second one will not 426 * (reach IFG). It is guaranteed that a second one will not
diff --git a/drivers/net/ethernet/atheros/ag71xx.c b/drivers/net/ethernet/atheros/ag71xx.c
index 7548247455d7..1b1a09095c0d 100644
--- a/drivers/net/ethernet/atheros/ag71xx.c
+++ b/drivers/net/ethernet/atheros/ag71xx.c
@@ -526,7 +526,7 @@ static int ag71xx_mdio_probe(struct ag71xx *ag)
526 struct device *dev = &ag->pdev->dev; 526 struct device *dev = &ag->pdev->dev;
527 struct net_device *ndev = ag->ndev; 527 struct net_device *ndev = ag->ndev;
528 static struct mii_bus *mii_bus; 528 static struct mii_bus *mii_bus;
529 struct device_node *np; 529 struct device_node *np, *mnp;
530 int err; 530 int err;
531 531
532 np = dev->of_node; 532 np = dev->of_node;
@@ -571,7 +571,9 @@ static int ag71xx_mdio_probe(struct ag71xx *ag)
571 msleep(200); 571 msleep(200);
572 } 572 }
573 573
574 err = of_mdiobus_register(mii_bus, np); 574 mnp = of_get_child_by_name(np, "mdio");
575 err = of_mdiobus_register(mii_bus, mnp);
576 of_node_put(mnp);
575 if (err) 577 if (err)
576 goto mdio_err_put_clk; 578 goto mdio_err_put_clk;
577 579
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c
index 5b602243d573..a4dead4ab0ed 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c
@@ -137,13 +137,12 @@ static int uldrx_handler(struct sge_rspq *q, const __be64 *rsp,
137static int alloc_uld_rxqs(struct adapter *adap, 137static int alloc_uld_rxqs(struct adapter *adap,
138 struct sge_uld_rxq_info *rxq_info, bool lro) 138 struct sge_uld_rxq_info *rxq_info, bool lro)
139{ 139{
140 struct sge *s = &adap->sge;
141 unsigned int nq = rxq_info->nrxq + rxq_info->nciq; 140 unsigned int nq = rxq_info->nrxq + rxq_info->nciq;
141 int i, err, msi_idx, que_idx = 0, bmap_idx = 0;
142 struct sge_ofld_rxq *q = rxq_info->uldrxq; 142 struct sge_ofld_rxq *q = rxq_info->uldrxq;
143 unsigned short *ids = rxq_info->rspq_id; 143 unsigned short *ids = rxq_info->rspq_id;
144 unsigned int bmap_idx = 0; 144 struct sge *s = &adap->sge;
145 unsigned int per_chan; 145 unsigned int per_chan;
146 int i, err, msi_idx, que_idx = 0;
147 146
148 per_chan = rxq_info->nrxq / adap->params.nports; 147 per_chan = rxq_info->nrxq / adap->params.nports;
149 148
@@ -161,6 +160,10 @@ static int alloc_uld_rxqs(struct adapter *adap,
161 160
162 if (msi_idx >= 0) { 161 if (msi_idx >= 0) {
163 bmap_idx = get_msix_idx_from_bmap(adap); 162 bmap_idx = get_msix_idx_from_bmap(adap);
163 if (bmap_idx < 0) {
164 err = -ENOSPC;
165 goto freeout;
166 }
164 msi_idx = adap->msix_info_ulds[bmap_idx].idx; 167 msi_idx = adap->msix_info_ulds[bmap_idx].idx;
165 } 168 }
166 err = t4_sge_alloc_rxq(adap, &q->rspq, false, 169 err = t4_sge_alloc_rxq(adap, &q->rspq, false,
diff --git a/drivers/net/ethernet/hisilicon/hns_mdio.c b/drivers/net/ethernet/hisilicon/hns_mdio.c
index 3e863a71c513..7df5d7d211d4 100644
--- a/drivers/net/ethernet/hisilicon/hns_mdio.c
+++ b/drivers/net/ethernet/hisilicon/hns_mdio.c
@@ -148,11 +148,15 @@ static int mdio_sc_cfg_reg_write(struct hns_mdio_device *mdio_dev,
148{ 148{
149 u32 time_cnt; 149 u32 time_cnt;
150 u32 reg_value; 150 u32 reg_value;
151 int ret;
151 152
152 regmap_write(mdio_dev->subctrl_vbase, cfg_reg, set_val); 153 regmap_write(mdio_dev->subctrl_vbase, cfg_reg, set_val);
153 154
154 for (time_cnt = MDIO_TIMEOUT; time_cnt; time_cnt--) { 155 for (time_cnt = MDIO_TIMEOUT; time_cnt; time_cnt--) {
155 regmap_read(mdio_dev->subctrl_vbase, st_reg, &reg_value); 156 ret = regmap_read(mdio_dev->subctrl_vbase, st_reg, &reg_value);
157 if (ret)
158 return ret;
159
156 reg_value &= st_msk; 160 reg_value &= st_msk;
157 if ((!!check_st) == (!!reg_value)) 161 if ((!!check_st) == (!!reg_value))
158 break; 162 break;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c
index 913f1e5aaaf2..d7c7467e2d53 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c
@@ -137,7 +137,8 @@ dr_icm_pool_mr_create(struct mlx5dr_icm_pool *pool,
137 137
138 icm_mr->icm_start_addr = icm_mr->dm.addr; 138 icm_mr->icm_start_addr = icm_mr->dm.addr;
139 139
140 align_diff = icm_mr->icm_start_addr % align_base; 140 /* align_base is always a power of 2 */
141 align_diff = icm_mr->icm_start_addr & (align_base - 1);
141 if (align_diff) 142 if (align_diff)
142 icm_mr->used_length = align_base - align_diff; 143 icm_mr->used_length = align_base - align_diff;
143 144
diff --git a/drivers/net/ethernet/mscc/ocelot_board.c b/drivers/net/ethernet/mscc/ocelot_board.c
index b063eb78fa0c..aac115136720 100644
--- a/drivers/net/ethernet/mscc/ocelot_board.c
+++ b/drivers/net/ethernet/mscc/ocelot_board.c
@@ -388,13 +388,14 @@ static int mscc_ocelot_probe(struct platform_device *pdev)
388 continue; 388 continue;
389 389
390 phy = of_phy_find_device(phy_node); 390 phy = of_phy_find_device(phy_node);
391 of_node_put(phy_node);
391 if (!phy) 392 if (!phy)
392 continue; 393 continue;
393 394
394 err = ocelot_probe_port(ocelot, port, regs, phy); 395 err = ocelot_probe_port(ocelot, port, regs, phy);
395 if (err) { 396 if (err) {
396 of_node_put(portnp); 397 of_node_put(portnp);
397 return err; 398 goto out_put_ports;
398 } 399 }
399 400
400 phy_mode = of_get_phy_mode(portnp); 401 phy_mode = of_get_phy_mode(portnp);
@@ -422,7 +423,8 @@ static int mscc_ocelot_probe(struct platform_device *pdev)
422 "invalid phy mode for port%d, (Q)SGMII only\n", 423 "invalid phy mode for port%d, (Q)SGMII only\n",
423 port); 424 port);
424 of_node_put(portnp); 425 of_node_put(portnp);
425 return -EINVAL; 426 err = -EINVAL;
427 goto out_put_ports;
426 } 428 }
427 429
428 serdes = devm_of_phy_get(ocelot->dev, portnp, NULL); 430 serdes = devm_of_phy_get(ocelot->dev, portnp, NULL);
@@ -435,7 +437,8 @@ static int mscc_ocelot_probe(struct platform_device *pdev)
435 "missing SerDes phys for port%d\n", 437 "missing SerDes phys for port%d\n",
436 port); 438 port);
437 439
438 goto err_probe_ports; 440 of_node_put(portnp);
441 goto out_put_ports;
439 } 442 }
440 443
441 ocelot->ports[port]->serdes = serdes; 444 ocelot->ports[port]->serdes = serdes;
@@ -447,9 +450,8 @@ static int mscc_ocelot_probe(struct platform_device *pdev)
447 450
448 dev_info(&pdev->dev, "Ocelot switch probed\n"); 451 dev_info(&pdev->dev, "Ocelot switch probed\n");
449 452
450 return 0; 453out_put_ports:
451 454 of_node_put(ports);
452err_probe_ports:
453 return err; 455 return err;
454} 456}
455 457
diff --git a/drivers/net/ethernet/pensando/Kconfig b/drivers/net/ethernet/pensando/Kconfig
index bd0583e409df..d25b88f53de4 100644
--- a/drivers/net/ethernet/pensando/Kconfig
+++ b/drivers/net/ethernet/pensando/Kconfig
@@ -20,6 +20,7 @@ if NET_VENDOR_PENSANDO
20config IONIC 20config IONIC
21 tristate "Pensando Ethernet IONIC Support" 21 tristate "Pensando Ethernet IONIC Support"
22 depends on 64BIT && PCI 22 depends on 64BIT && PCI
23 select NET_DEVLINK
23 help 24 help
24 This enables the support for the Pensando family of Ethernet 25 This enables the support for the Pensando family of Ethernet
25 adapters. More specific information on this driver can be 26 adapters. More specific information on this driver can be
diff --git a/drivers/net/ethernet/qlogic/qla3xxx.c b/drivers/net/ethernet/qlogic/qla3xxx.c
index 457444894d80..b4b8ba00ee01 100644
--- a/drivers/net/ethernet/qlogic/qla3xxx.c
+++ b/drivers/net/ethernet/qlogic/qla3xxx.c
@@ -2787,6 +2787,7 @@ static int ql_alloc_large_buffers(struct ql3_adapter *qdev)
2787 netdev_err(qdev->ndev, 2787 netdev_err(qdev->ndev,
2788 "PCI mapping failed with error: %d\n", 2788 "PCI mapping failed with error: %d\n",
2789 err); 2789 err);
2790 dev_kfree_skb_irq(skb);
2790 ql_free_large_buffers(qdev); 2791 ql_free_large_buffers(qdev);
2791 return -ENOMEM; 2792 return -ENOMEM;
2792 } 2793 }
diff --git a/drivers/net/ethernet/socionext/netsec.c b/drivers/net/ethernet/socionext/netsec.c
index 55db7fbd43cc..f9e6744d8fd6 100644
--- a/drivers/net/ethernet/socionext/netsec.c
+++ b/drivers/net/ethernet/socionext/netsec.c
@@ -282,7 +282,6 @@ struct netsec_desc_ring {
282 void *vaddr; 282 void *vaddr;
283 u16 head, tail; 283 u16 head, tail;
284 u16 xdp_xmit; /* netsec_xdp_xmit packets */ 284 u16 xdp_xmit; /* netsec_xdp_xmit packets */
285 bool is_xdp;
286 struct page_pool *page_pool; 285 struct page_pool *page_pool;
287 struct xdp_rxq_info xdp_rxq; 286 struct xdp_rxq_info xdp_rxq;
288 spinlock_t lock; /* XDP tx queue locking */ 287 spinlock_t lock; /* XDP tx queue locking */
@@ -634,8 +633,7 @@ static bool netsec_clean_tx_dring(struct netsec_priv *priv)
634 unsigned int bytes; 633 unsigned int bytes;
635 int cnt = 0; 634 int cnt = 0;
636 635
637 if (dring->is_xdp) 636 spin_lock(&dring->lock);
638 spin_lock(&dring->lock);
639 637
640 bytes = 0; 638 bytes = 0;
641 entry = dring->vaddr + DESC_SZ * tail; 639 entry = dring->vaddr + DESC_SZ * tail;
@@ -682,8 +680,8 @@ next:
682 entry = dring->vaddr + DESC_SZ * tail; 680 entry = dring->vaddr + DESC_SZ * tail;
683 cnt++; 681 cnt++;
684 } 682 }
685 if (dring->is_xdp) 683
686 spin_unlock(&dring->lock); 684 spin_unlock(&dring->lock);
687 685
688 if (!cnt) 686 if (!cnt)
689 return false; 687 return false;
@@ -799,9 +797,6 @@ static void netsec_set_tx_de(struct netsec_priv *priv,
799 de->data_buf_addr_lw = lower_32_bits(desc->dma_addr); 797 de->data_buf_addr_lw = lower_32_bits(desc->dma_addr);
800 de->buf_len_info = (tx_ctrl->tcp_seg_len << 16) | desc->len; 798 de->buf_len_info = (tx_ctrl->tcp_seg_len << 16) | desc->len;
801 de->attr = attr; 799 de->attr = attr;
802 /* under spin_lock if using XDP */
803 if (!dring->is_xdp)
804 dma_wmb();
805 800
806 dring->desc[idx] = *desc; 801 dring->desc[idx] = *desc;
807 if (desc->buf_type == TYPE_NETSEC_SKB) 802 if (desc->buf_type == TYPE_NETSEC_SKB)
@@ -1123,12 +1118,10 @@ static netdev_tx_t netsec_netdev_start_xmit(struct sk_buff *skb,
1123 u16 tso_seg_len = 0; 1118 u16 tso_seg_len = 0;
1124 int filled; 1119 int filled;
1125 1120
1126 if (dring->is_xdp) 1121 spin_lock_bh(&dring->lock);
1127 spin_lock_bh(&dring->lock);
1128 filled = netsec_desc_used(dring); 1122 filled = netsec_desc_used(dring);
1129 if (netsec_check_stop_tx(priv, filled)) { 1123 if (netsec_check_stop_tx(priv, filled)) {
1130 if (dring->is_xdp) 1124 spin_unlock_bh(&dring->lock);
1131 spin_unlock_bh(&dring->lock);
1132 net_warn_ratelimited("%s %s Tx queue full\n", 1125 net_warn_ratelimited("%s %s Tx queue full\n",
1133 dev_name(priv->dev), ndev->name); 1126 dev_name(priv->dev), ndev->name);
1134 return NETDEV_TX_BUSY; 1127 return NETDEV_TX_BUSY;
@@ -1161,8 +1154,7 @@ static netdev_tx_t netsec_netdev_start_xmit(struct sk_buff *skb,
1161 tx_desc.dma_addr = dma_map_single(priv->dev, skb->data, 1154 tx_desc.dma_addr = dma_map_single(priv->dev, skb->data,
1162 skb_headlen(skb), DMA_TO_DEVICE); 1155 skb_headlen(skb), DMA_TO_DEVICE);
1163 if (dma_mapping_error(priv->dev, tx_desc.dma_addr)) { 1156 if (dma_mapping_error(priv->dev, tx_desc.dma_addr)) {
1164 if (dring->is_xdp) 1157 spin_unlock_bh(&dring->lock);
1165 spin_unlock_bh(&dring->lock);
1166 netif_err(priv, drv, priv->ndev, 1158 netif_err(priv, drv, priv->ndev,
1167 "%s: DMA mapping failed\n", __func__); 1159 "%s: DMA mapping failed\n", __func__);
1168 ndev->stats.tx_dropped++; 1160 ndev->stats.tx_dropped++;
@@ -1177,8 +1169,7 @@ static netdev_tx_t netsec_netdev_start_xmit(struct sk_buff *skb,
1177 netdev_sent_queue(priv->ndev, skb->len); 1169 netdev_sent_queue(priv->ndev, skb->len);
1178 1170
1179 netsec_set_tx_de(priv, dring, &tx_ctrl, &tx_desc, skb); 1171 netsec_set_tx_de(priv, dring, &tx_ctrl, &tx_desc, skb);
1180 if (dring->is_xdp) 1172 spin_unlock_bh(&dring->lock);
1181 spin_unlock_bh(&dring->lock);
1182 netsec_write(priv, NETSEC_REG_NRM_TX_PKTCNT, 1); /* submit another tx */ 1173 netsec_write(priv, NETSEC_REG_NRM_TX_PKTCNT, 1); /* submit another tx */
1183 1174
1184 return NETDEV_TX_OK; 1175 return NETDEV_TX_OK;
@@ -1262,7 +1253,6 @@ err:
1262static void netsec_setup_tx_dring(struct netsec_priv *priv) 1253static void netsec_setup_tx_dring(struct netsec_priv *priv)
1263{ 1254{
1264 struct netsec_desc_ring *dring = &priv->desc_ring[NETSEC_RING_TX]; 1255 struct netsec_desc_ring *dring = &priv->desc_ring[NETSEC_RING_TX];
1265 struct bpf_prog *xdp_prog = READ_ONCE(priv->xdp_prog);
1266 int i; 1256 int i;
1267 1257
1268 for (i = 0; i < DESC_NUM; i++) { 1258 for (i = 0; i < DESC_NUM; i++) {
@@ -1275,12 +1265,6 @@ static void netsec_setup_tx_dring(struct netsec_priv *priv)
1275 */ 1265 */
1276 de->attr = 1U << NETSEC_TX_SHIFT_OWN_FIELD; 1266 de->attr = 1U << NETSEC_TX_SHIFT_OWN_FIELD;
1277 } 1267 }
1278
1279 if (xdp_prog)
1280 dring->is_xdp = true;
1281 else
1282 dring->is_xdp = false;
1283
1284} 1268}
1285 1269
1286static int netsec_setup_rx_dring(struct netsec_priv *priv) 1270static int netsec_setup_rx_dring(struct netsec_priv *priv)
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
index 9b4b5f69fc02..2cb9c53f93b8 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
@@ -401,8 +401,11 @@ static void dwmac4_set_filter(struct mac_device_info *hw,
401 int numhashregs = (hw->multicast_filter_bins >> 5); 401 int numhashregs = (hw->multicast_filter_bins >> 5);
402 int mcbitslog2 = hw->mcast_bits_log2; 402 int mcbitslog2 = hw->mcast_bits_log2;
403 unsigned int value; 403 unsigned int value;
404 u32 mc_filter[8];
404 int i; 405 int i;
405 406
407 memset(mc_filter, 0, sizeof(mc_filter));
408
406 value = readl(ioaddr + GMAC_PACKET_FILTER); 409 value = readl(ioaddr + GMAC_PACKET_FILTER);
407 value &= ~GMAC_PACKET_FILTER_HMC; 410 value &= ~GMAC_PACKET_FILTER_HMC;
408 value &= ~GMAC_PACKET_FILTER_HPF; 411 value &= ~GMAC_PACKET_FILTER_HPF;
@@ -416,16 +419,13 @@ static void dwmac4_set_filter(struct mac_device_info *hw,
416 /* Pass all multi */ 419 /* Pass all multi */
417 value |= GMAC_PACKET_FILTER_PM; 420 value |= GMAC_PACKET_FILTER_PM;
418 /* Set all the bits of the HASH tab */ 421 /* Set all the bits of the HASH tab */
419 for (i = 0; i < numhashregs; i++) 422 memset(mc_filter, 0xff, sizeof(mc_filter));
420 writel(0xffffffff, ioaddr + GMAC_HASH_TAB(i));
421 } else if (!netdev_mc_empty(dev)) { 423 } else if (!netdev_mc_empty(dev)) {
422 struct netdev_hw_addr *ha; 424 struct netdev_hw_addr *ha;
423 u32 mc_filter[8];
424 425
425 /* Hash filter for multicast */ 426 /* Hash filter for multicast */
426 value |= GMAC_PACKET_FILTER_HMC; 427 value |= GMAC_PACKET_FILTER_HMC;
427 428
428 memset(mc_filter, 0, sizeof(mc_filter));
429 netdev_for_each_mc_addr(ha, dev) { 429 netdev_for_each_mc_addr(ha, dev) {
430 /* The upper n bits of the calculated CRC are used to 430 /* The upper n bits of the calculated CRC are used to
431 * index the contents of the hash table. The number of 431 * index the contents of the hash table. The number of
@@ -440,10 +440,11 @@ static void dwmac4_set_filter(struct mac_device_info *hw,
440 */ 440 */
441 mc_filter[bit_nr >> 5] |= (1 << (bit_nr & 0x1f)); 441 mc_filter[bit_nr >> 5] |= (1 << (bit_nr & 0x1f));
442 } 442 }
443 for (i = 0; i < numhashregs; i++)
444 writel(mc_filter[i], ioaddr + GMAC_HASH_TAB(i));
445 } 443 }
446 444
445 for (i = 0; i < numhashregs; i++)
446 writel(mc_filter[i], ioaddr + GMAC_HASH_TAB(i));
447
447 value |= GMAC_PACKET_FILTER_HPF; 448 value |= GMAC_PACKET_FILTER_HPF;
448 449
449 /* Handle multiple unicast addresses */ 450 /* Handle multiple unicast addresses */
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h
index 5923ca62d793..99037386080a 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h
+++ b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h
@@ -84,7 +84,7 @@
84#define XGMAC_TSIE BIT(12) 84#define XGMAC_TSIE BIT(12)
85#define XGMAC_LPIIE BIT(5) 85#define XGMAC_LPIIE BIT(5)
86#define XGMAC_PMTIE BIT(4) 86#define XGMAC_PMTIE BIT(4)
87#define XGMAC_INT_DEFAULT_EN (XGMAC_LPIIE | XGMAC_PMTIE | XGMAC_TSIE) 87#define XGMAC_INT_DEFAULT_EN (XGMAC_LPIIE | XGMAC_PMTIE)
88#define XGMAC_Qx_TX_FLOW_CTRL(x) (0x00000070 + (x) * 4) 88#define XGMAC_Qx_TX_FLOW_CTRL(x) (0x00000070 + (x) * 4)
89#define XGMAC_PT GENMASK(31, 16) 89#define XGMAC_PT GENMASK(31, 16)
90#define XGMAC_PT_SHIFT 16 90#define XGMAC_PT_SHIFT 16
@@ -122,6 +122,7 @@
122#define XGMAC_HWFEAT_GMIISEL BIT(1) 122#define XGMAC_HWFEAT_GMIISEL BIT(1)
123#define XGMAC_HW_FEATURE1 0x00000120 123#define XGMAC_HW_FEATURE1 0x00000120
124#define XGMAC_HWFEAT_L3L4FNUM GENMASK(30, 27) 124#define XGMAC_HWFEAT_L3L4FNUM GENMASK(30, 27)
125#define XGMAC_HWFEAT_HASHTBLSZ GENMASK(25, 24)
125#define XGMAC_HWFEAT_RSSEN BIT(20) 126#define XGMAC_HWFEAT_RSSEN BIT(20)
126#define XGMAC_HWFEAT_TSOEN BIT(18) 127#define XGMAC_HWFEAT_TSOEN BIT(18)
127#define XGMAC_HWFEAT_SPHEN BIT(17) 128#define XGMAC_HWFEAT_SPHEN BIT(17)
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c
index 2b277b2c586b..5031398e612c 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c
@@ -472,7 +472,7 @@ static void dwxgmac2_set_filter(struct mac_device_info *hw,
472 dwxgmac2_set_mchash(ioaddr, mc_filter, mcbitslog2); 472 dwxgmac2_set_mchash(ioaddr, mc_filter, mcbitslog2);
473 473
474 /* Handle multiple unicast addresses */ 474 /* Handle multiple unicast addresses */
475 if (netdev_uc_count(dev) > XGMAC_ADDR_MAX) { 475 if (netdev_uc_count(dev) > hw->unicast_filter_entries) {
476 value |= XGMAC_FILTER_PR; 476 value |= XGMAC_FILTER_PR;
477 } else { 477 } else {
478 struct netdev_hw_addr *ha; 478 struct netdev_hw_addr *ha;
@@ -523,8 +523,8 @@ static int dwxgmac2_rss_configure(struct mac_device_info *hw,
523 struct stmmac_rss *cfg, u32 num_rxq) 523 struct stmmac_rss *cfg, u32 num_rxq)
524{ 524{
525 void __iomem *ioaddr = hw->pcsr; 525 void __iomem *ioaddr = hw->pcsr;
526 u32 value, *key;
526 int i, ret; 527 int i, ret;
527 u32 value;
528 528
529 value = readl(ioaddr + XGMAC_RSS_CTRL); 529 value = readl(ioaddr + XGMAC_RSS_CTRL);
530 if (!cfg || !cfg->enable) { 530 if (!cfg || !cfg->enable) {
@@ -533,8 +533,9 @@ static int dwxgmac2_rss_configure(struct mac_device_info *hw,
533 return 0; 533 return 0;
534 } 534 }
535 535
536 for (i = 0; i < (sizeof(cfg->key) / sizeof(u32)); i++) { 536 key = (u32 *)cfg->key;
537 ret = dwxgmac2_rss_write_reg(ioaddr, true, i, cfg->key[i]); 537 for (i = 0; i < (ARRAY_SIZE(cfg->key) / sizeof(u32)); i++) {
538 ret = dwxgmac2_rss_write_reg(ioaddr, true, i, key[i]);
538 if (ret) 539 if (ret)
539 return ret; 540 return ret;
540 } 541 }
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c
index 53c4a40d8386..965cbe3e6f51 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c
@@ -380,6 +380,7 @@ static void dwxgmac2_get_hw_feature(void __iomem *ioaddr,
380 /* MAC HW feature 1 */ 380 /* MAC HW feature 1 */
381 hw_cap = readl(ioaddr + XGMAC_HW_FEATURE1); 381 hw_cap = readl(ioaddr + XGMAC_HW_FEATURE1);
382 dma_cap->l3l4fnum = (hw_cap & XGMAC_HWFEAT_L3L4FNUM) >> 27; 382 dma_cap->l3l4fnum = (hw_cap & XGMAC_HWFEAT_L3L4FNUM) >> 27;
383 dma_cap->hash_tb_sz = (hw_cap & XGMAC_HWFEAT_HASHTBLSZ) >> 24;
383 dma_cap->rssen = (hw_cap & XGMAC_HWFEAT_RSSEN) >> 20; 384 dma_cap->rssen = (hw_cap & XGMAC_HWFEAT_RSSEN) >> 20;
384 dma_cap->tsoen = (hw_cap & XGMAC_HWFEAT_TSOEN) >> 18; 385 dma_cap->tsoen = (hw_cap & XGMAC_HWFEAT_TSOEN) >> 18;
385 dma_cap->sphen = (hw_cap & XGMAC_HWFEAT_SPHEN) >> 17; 386 dma_cap->sphen = (hw_cap & XGMAC_HWFEAT_SPHEN) >> 17;
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index d3232738fb25..c76a1336a451 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -629,6 +629,7 @@ static int stmmac_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
629 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT; 629 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
630 ptp_v2 = PTP_TCR_TSVER2ENA; 630 ptp_v2 = PTP_TCR_TSVER2ENA;
631 snap_type_sel = PTP_TCR_SNAPTYPSEL_1; 631 snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
632 ts_event_en = PTP_TCR_TSEVNTENA;
632 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA; 633 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
633 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA; 634 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
634 ptp_over_ethernet = PTP_TCR_TSIPENA; 635 ptp_over_ethernet = PTP_TCR_TSIPENA;
@@ -4715,11 +4716,9 @@ int stmmac_suspend(struct device *dev)
4715 if (!ndev || !netif_running(ndev)) 4716 if (!ndev || !netif_running(ndev))
4716 return 0; 4717 return 0;
4717 4718
4718 mutex_lock(&priv->lock); 4719 phylink_mac_change(priv->phylink, false);
4719 4720
4720 rtnl_lock(); 4721 mutex_lock(&priv->lock);
4721 phylink_stop(priv->phylink);
4722 rtnl_unlock();
4723 4722
4724 netif_device_detach(ndev); 4723 netif_device_detach(ndev);
4725 stmmac_stop_all_queues(priv); 4724 stmmac_stop_all_queues(priv);
@@ -4734,6 +4733,12 @@ int stmmac_suspend(struct device *dev)
4734 stmmac_pmt(priv, priv->hw, priv->wolopts); 4733 stmmac_pmt(priv, priv->hw, priv->wolopts);
4735 priv->irq_wake = 1; 4734 priv->irq_wake = 1;
4736 } else { 4735 } else {
4736 mutex_unlock(&priv->lock);
4737 rtnl_lock();
4738 phylink_stop(priv->phylink);
4739 rtnl_unlock();
4740 mutex_lock(&priv->lock);
4741
4737 stmmac_mac_set(priv, priv->ioaddr, false); 4742 stmmac_mac_set(priv, priv->ioaddr, false);
4738 pinctrl_pm_select_sleep_state(priv->device); 4743 pinctrl_pm_select_sleep_state(priv->device);
4739 /* Disable clock in case of PWM is off */ 4744 /* Disable clock in case of PWM is off */
@@ -4824,12 +4829,16 @@ int stmmac_resume(struct device *dev)
4824 4829
4825 stmmac_start_all_queues(priv); 4830 stmmac_start_all_queues(priv);
4826 4831
4827 rtnl_lock();
4828 phylink_start(priv->phylink);
4829 rtnl_unlock();
4830
4831 mutex_unlock(&priv->lock); 4832 mutex_unlock(&priv->lock);
4832 4833
4834 if (!device_may_wakeup(priv->device)) {
4835 rtnl_lock();
4836 phylink_start(priv->phylink);
4837 rtnl_unlock();
4838 }
4839
4840 phylink_mac_change(priv->phylink, true);
4841
4833 return 0; 4842 return 0;
4834} 4843}
4835EXPORT_SYMBOL_GPL(stmmac_resume); 4844EXPORT_SYMBOL_GPL(stmmac_resume);
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
index 5f66f6161629..cc76a42c7466 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
@@ -1564,10 +1564,6 @@ static int __stmmac_test_jumbo(struct stmmac_priv *priv, u16 queue)
1564 struct stmmac_packet_attrs attr = { }; 1564 struct stmmac_packet_attrs attr = { };
1565 int size = priv->dma_buf_sz; 1565 int size = priv->dma_buf_sz;
1566 1566
1567 /* Only XGMAC has SW support for multiple RX descs in same packet */
1568 if (priv->plat->has_xgmac)
1569 size = priv->dev->max_mtu;
1570
1571 attr.dst = priv->dev->dev_addr; 1567 attr.dst = priv->dev->dev_addr;
1572 attr.max_size = size - ETH_FCS_LEN; 1568 attr.max_size = size - ETH_FCS_LEN;
1573 attr.queue_mapping = queue; 1569 attr.queue_mapping = queue;
diff --git a/drivers/net/ieee802154/atusb.c b/drivers/net/ieee802154/atusb.c
index ceddb424f887..0dd0ba915ab9 100644
--- a/drivers/net/ieee802154/atusb.c
+++ b/drivers/net/ieee802154/atusb.c
@@ -1137,10 +1137,11 @@ static void atusb_disconnect(struct usb_interface *interface)
1137 1137
1138 ieee802154_unregister_hw(atusb->hw); 1138 ieee802154_unregister_hw(atusb->hw);
1139 1139
1140 usb_put_dev(atusb->usb_dev);
1141
1140 ieee802154_free_hw(atusb->hw); 1142 ieee802154_free_hw(atusb->hw);
1141 1143
1142 usb_set_intfdata(interface, NULL); 1144 usb_set_intfdata(interface, NULL);
1143 usb_put_dev(atusb->usb_dev);
1144 1145
1145 pr_debug("%s done\n", __func__); 1146 pr_debug("%s done\n", __func__);
1146} 1147}
diff --git a/drivers/net/ieee802154/ca8210.c b/drivers/net/ieee802154/ca8210.c
index 11402dc347db..430c93786153 100644
--- a/drivers/net/ieee802154/ca8210.c
+++ b/drivers/net/ieee802154/ca8210.c
@@ -3145,12 +3145,12 @@ static int ca8210_probe(struct spi_device *spi_device)
3145 goto error; 3145 goto error;
3146 } 3146 }
3147 3147
3148 priv->spi->dev.platform_data = pdata;
3148 ret = ca8210_get_platform_data(priv->spi, pdata); 3149 ret = ca8210_get_platform_data(priv->spi, pdata);
3149 if (ret) { 3150 if (ret) {
3150 dev_crit(&spi_device->dev, "ca8210_get_platform_data failed\n"); 3151 dev_crit(&spi_device->dev, "ca8210_get_platform_data failed\n");
3151 goto error; 3152 goto error;
3152 } 3153 }
3153 priv->spi->dev.platform_data = pdata;
3154 3154
3155 ret = ca8210_dev_com_init(priv); 3155 ret = ca8210_dev_com_init(priv);
3156 if (ret) { 3156 if (ret) {
diff --git a/drivers/net/ieee802154/mcr20a.c b/drivers/net/ieee802154/mcr20a.c
index 17f2300e63ee..8dc04e2590b1 100644
--- a/drivers/net/ieee802154/mcr20a.c
+++ b/drivers/net/ieee802154/mcr20a.c
@@ -800,7 +800,7 @@ mcr20a_handle_rx_read_buf_complete(void *context)
800 if (!skb) 800 if (!skb)
801 return; 801 return;
802 802
803 memcpy(skb_put(skb, len), lp->rx_buf, len); 803 __skb_put_data(skb, lp->rx_buf, len);
804 ieee802154_rx_irqsafe(lp->hw, skb, lp->rx_lqi[0]); 804 ieee802154_rx_irqsafe(lp->hw, skb, lp->rx_lqi[0]);
805 805
806 print_hex_dump_debug("mcr20a rx: ", DUMP_PREFIX_OFFSET, 16, 1, 806 print_hex_dump_debug("mcr20a rx: ", DUMP_PREFIX_OFFSET, 16, 1,
diff --git a/drivers/net/phy/at803x.c b/drivers/net/phy/at803x.c
index 2aa7b2e60046..1eb5d4fb8925 100644
--- a/drivers/net/phy/at803x.c
+++ b/drivers/net/phy/at803x.c
@@ -15,6 +15,15 @@
15#include <linux/of_gpio.h> 15#include <linux/of_gpio.h>
16#include <linux/gpio/consumer.h> 16#include <linux/gpio/consumer.h>
17 17
18#define AT803X_SPECIFIC_STATUS 0x11
19#define AT803X_SS_SPEED_MASK (3 << 14)
20#define AT803X_SS_SPEED_1000 (2 << 14)
21#define AT803X_SS_SPEED_100 (1 << 14)
22#define AT803X_SS_SPEED_10 (0 << 14)
23#define AT803X_SS_DUPLEX BIT(13)
24#define AT803X_SS_SPEED_DUPLEX_RESOLVED BIT(11)
25#define AT803X_SS_MDIX BIT(6)
26
18#define AT803X_INTR_ENABLE 0x12 27#define AT803X_INTR_ENABLE 0x12
19#define AT803X_INTR_ENABLE_AUTONEG_ERR BIT(15) 28#define AT803X_INTR_ENABLE_AUTONEG_ERR BIT(15)
20#define AT803X_INTR_ENABLE_SPEED_CHANGED BIT(14) 29#define AT803X_INTR_ENABLE_SPEED_CHANGED BIT(14)
@@ -357,6 +366,64 @@ static int at803x_aneg_done(struct phy_device *phydev)
357 return aneg_done; 366 return aneg_done;
358} 367}
359 368
369static int at803x_read_status(struct phy_device *phydev)
370{
371 int ss, err, old_link = phydev->link;
372
373 /* Update the link, but return if there was an error */
374 err = genphy_update_link(phydev);
375 if (err)
376 return err;
377
378 /* why bother the PHY if nothing can have changed */
379 if (phydev->autoneg == AUTONEG_ENABLE && old_link && phydev->link)
380 return 0;
381
382 phydev->speed = SPEED_UNKNOWN;
383 phydev->duplex = DUPLEX_UNKNOWN;
384 phydev->pause = 0;
385 phydev->asym_pause = 0;
386
387 err = genphy_read_lpa(phydev);
388 if (err < 0)
389 return err;
390
391 /* Read the AT8035 PHY-Specific Status register, which indicates the
392 * speed and duplex that the PHY is actually using, irrespective of
393 * whether we are in autoneg mode or not.
394 */
395 ss = phy_read(phydev, AT803X_SPECIFIC_STATUS);
396 if (ss < 0)
397 return ss;
398
399 if (ss & AT803X_SS_SPEED_DUPLEX_RESOLVED) {
400 switch (ss & AT803X_SS_SPEED_MASK) {
401 case AT803X_SS_SPEED_10:
402 phydev->speed = SPEED_10;
403 break;
404 case AT803X_SS_SPEED_100:
405 phydev->speed = SPEED_100;
406 break;
407 case AT803X_SS_SPEED_1000:
408 phydev->speed = SPEED_1000;
409 break;
410 }
411 if (ss & AT803X_SS_DUPLEX)
412 phydev->duplex = DUPLEX_FULL;
413 else
414 phydev->duplex = DUPLEX_HALF;
415 if (ss & AT803X_SS_MDIX)
416 phydev->mdix = ETH_TP_MDI_X;
417 else
418 phydev->mdix = ETH_TP_MDI;
419 }
420
421 if (phydev->autoneg == AUTONEG_ENABLE && phydev->autoneg_complete)
422 phy_resolve_aneg_pause(phydev);
423
424 return 0;
425}
426
360static struct phy_driver at803x_driver[] = { 427static struct phy_driver at803x_driver[] = {
361{ 428{
362 /* ATHEROS 8035 */ 429 /* ATHEROS 8035 */
@@ -370,6 +437,7 @@ static struct phy_driver at803x_driver[] = {
370 .suspend = at803x_suspend, 437 .suspend = at803x_suspend,
371 .resume = at803x_resume, 438 .resume = at803x_resume,
372 /* PHY_GBIT_FEATURES */ 439 /* PHY_GBIT_FEATURES */
440 .read_status = at803x_read_status,
373 .ack_interrupt = at803x_ack_interrupt, 441 .ack_interrupt = at803x_ack_interrupt,
374 .config_intr = at803x_config_intr, 442 .config_intr = at803x_config_intr,
375}, { 443}, {
@@ -399,6 +467,7 @@ static struct phy_driver at803x_driver[] = {
399 .suspend = at803x_suspend, 467 .suspend = at803x_suspend,
400 .resume = at803x_resume, 468 .resume = at803x_resume,
401 /* PHY_GBIT_FEATURES */ 469 /* PHY_GBIT_FEATURES */
470 .read_status = at803x_read_status,
402 .aneg_done = at803x_aneg_done, 471 .aneg_done = at803x_aneg_done,
403 .ack_interrupt = &at803x_ack_interrupt, 472 .ack_interrupt = &at803x_ack_interrupt,
404 .config_intr = &at803x_config_intr, 473 .config_intr = &at803x_config_intr,
diff --git a/drivers/net/phy/mdio_device.c b/drivers/net/phy/mdio_device.c
index e282600bd83e..c1d345c3cab3 100644
--- a/drivers/net/phy/mdio_device.c
+++ b/drivers/net/phy/mdio_device.c
@@ -121,7 +121,7 @@ void mdio_device_reset(struct mdio_device *mdiodev, int value)
121 return; 121 return;
122 122
123 if (mdiodev->reset_gpio) 123 if (mdiodev->reset_gpio)
124 gpiod_set_value(mdiodev->reset_gpio, value); 124 gpiod_set_value_cansleep(mdiodev->reset_gpio, value);
125 125
126 if (mdiodev->reset_ctrl) { 126 if (mdiodev->reset_ctrl) {
127 if (value) 127 if (value)
diff --git a/drivers/net/phy/phy-core.c b/drivers/net/phy/phy-core.c
index 369903d9b6ec..9412669b579c 100644
--- a/drivers/net/phy/phy-core.c
+++ b/drivers/net/phy/phy-core.c
@@ -283,6 +283,18 @@ void of_set_phy_eee_broken(struct phy_device *phydev)
283 phydev->eee_broken_modes = broken; 283 phydev->eee_broken_modes = broken;
284} 284}
285 285
286void phy_resolve_aneg_pause(struct phy_device *phydev)
287{
288 if (phydev->duplex == DUPLEX_FULL) {
289 phydev->pause = linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT,
290 phydev->lp_advertising);
291 phydev->asym_pause = linkmode_test_bit(
292 ETHTOOL_LINK_MODE_Asym_Pause_BIT,
293 phydev->lp_advertising);
294 }
295}
296EXPORT_SYMBOL_GPL(phy_resolve_aneg_pause);
297
286/** 298/**
287 * phy_resolve_aneg_linkmode - resolve the advertisements into phy settings 299 * phy_resolve_aneg_linkmode - resolve the advertisements into phy settings
288 * @phydev: The phy_device struct 300 * @phydev: The phy_device struct
@@ -305,13 +317,7 @@ void phy_resolve_aneg_linkmode(struct phy_device *phydev)
305 break; 317 break;
306 } 318 }
307 319
308 if (phydev->duplex == DUPLEX_FULL) { 320 phy_resolve_aneg_pause(phydev);
309 phydev->pause = linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT,
310 phydev->lp_advertising);
311 phydev->asym_pause = linkmode_test_bit(
312 ETHTOOL_LINK_MODE_Asym_Pause_BIT,
313 phydev->lp_advertising);
314 }
315} 321}
316EXPORT_SYMBOL_GPL(phy_resolve_aneg_linkmode); 322EXPORT_SYMBOL_GPL(phy_resolve_aneg_linkmode);
317 323
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index 7c92afd36bbe..119e6f466056 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -457,6 +457,11 @@ int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd)
457 val); 457 val);
458 change_autoneg = true; 458 change_autoneg = true;
459 break; 459 break;
460 case MII_CTRL1000:
461 mii_ctrl1000_mod_linkmode_adv_t(phydev->advertising,
462 val);
463 change_autoneg = true;
464 break;
460 default: 465 default:
461 /* do nothing */ 466 /* do nothing */
462 break; 467 break;
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index d347ddcac45b..9d2bbb13293e 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -1783,32 +1783,9 @@ done:
1783} 1783}
1784EXPORT_SYMBOL(genphy_update_link); 1784EXPORT_SYMBOL(genphy_update_link);
1785 1785
1786/** 1786int genphy_read_lpa(struct phy_device *phydev)
1787 * genphy_read_status - check the link status and update current link state
1788 * @phydev: target phy_device struct
1789 *
1790 * Description: Check the link, then figure out the current state
1791 * by comparing what we advertise with what the link partner
1792 * advertises. Start by checking the gigabit possibilities,
1793 * then move on to 10/100.
1794 */
1795int genphy_read_status(struct phy_device *phydev)
1796{ 1787{
1797 int lpa, lpagb, err, old_link = phydev->link; 1788 int lpa, lpagb;
1798
1799 /* Update the link, but return if there was an error */
1800 err = genphy_update_link(phydev);
1801 if (err)
1802 return err;
1803
1804 /* why bother the PHY if nothing can have changed */
1805 if (phydev->autoneg == AUTONEG_ENABLE && old_link && phydev->link)
1806 return 0;
1807
1808 phydev->speed = SPEED_UNKNOWN;
1809 phydev->duplex = DUPLEX_UNKNOWN;
1810 phydev->pause = 0;
1811 phydev->asym_pause = 0;
1812 1789
1813 if (phydev->autoneg == AUTONEG_ENABLE && phydev->autoneg_complete) { 1790 if (phydev->autoneg == AUTONEG_ENABLE && phydev->autoneg_complete) {
1814 if (phydev->is_gigabit_capable) { 1791 if (phydev->is_gigabit_capable) {
@@ -1838,6 +1815,44 @@ int genphy_read_status(struct phy_device *phydev)
1838 return lpa; 1815 return lpa;
1839 1816
1840 mii_lpa_mod_linkmode_lpa_t(phydev->lp_advertising, lpa); 1817 mii_lpa_mod_linkmode_lpa_t(phydev->lp_advertising, lpa);
1818 }
1819
1820 return 0;
1821}
1822EXPORT_SYMBOL(genphy_read_lpa);
1823
1824/**
1825 * genphy_read_status - check the link status and update current link state
1826 * @phydev: target phy_device struct
1827 *
1828 * Description: Check the link, then figure out the current state
1829 * by comparing what we advertise with what the link partner
1830 * advertises. Start by checking the gigabit possibilities,
1831 * then move on to 10/100.
1832 */
1833int genphy_read_status(struct phy_device *phydev)
1834{
1835 int err, old_link = phydev->link;
1836
1837 /* Update the link, but return if there was an error */
1838 err = genphy_update_link(phydev);
1839 if (err)
1840 return err;
1841
1842 /* why bother the PHY if nothing can have changed */
1843 if (phydev->autoneg == AUTONEG_ENABLE && old_link && phydev->link)
1844 return 0;
1845
1846 phydev->speed = SPEED_UNKNOWN;
1847 phydev->duplex = DUPLEX_UNKNOWN;
1848 phydev->pause = 0;
1849 phydev->asym_pause = 0;
1850
1851 err = genphy_read_lpa(phydev);
1852 if (err < 0)
1853 return err;
1854
1855 if (phydev->autoneg == AUTONEG_ENABLE && phydev->autoneg_complete) {
1841 phy_resolve_aneg_linkmode(phydev); 1856 phy_resolve_aneg_linkmode(phydev);
1842 } else if (phydev->autoneg == AUTONEG_DISABLE) { 1857 } else if (phydev->autoneg == AUTONEG_DISABLE) {
1843 int bmcr = phy_read(phydev, MII_BMCR); 1858 int bmcr = phy_read(phydev, MII_BMCR);
diff --git a/drivers/net/ppp/pptp.c b/drivers/net/ppp/pptp.c
index 734de7de03f7..e1fabb3e3246 100644
--- a/drivers/net/ppp/pptp.c
+++ b/drivers/net/ppp/pptp.c
@@ -238,7 +238,7 @@ static int pptp_xmit(struct ppp_channel *chan, struct sk_buff *skb)
238 skb_dst_drop(skb); 238 skb_dst_drop(skb);
239 skb_dst_set(skb, &rt->dst); 239 skb_dst_set(skb, &rt->dst);
240 240
241 nf_reset(skb); 241 nf_reset_ct(skb);
242 242
243 skb->ip_summed = CHECKSUM_NONE; 243 skb->ip_summed = CHECKSUM_NONE;
244 ip_select_ident(net, skb, NULL); 244 ip_select_ident(net, skb, NULL);
@@ -358,7 +358,7 @@ static int pptp_rcv(struct sk_buff *skb)
358 po = lookup_chan(htons(header->call_id), iph->saddr); 358 po = lookup_chan(htons(header->call_id), iph->saddr);
359 if (po) { 359 if (po) {
360 skb_dst_drop(skb); 360 skb_dst_drop(skb);
361 nf_reset(skb); 361 nf_reset_ct(skb);
362 return sk_receive_skb(sk_pppox(po), skb, 0); 362 return sk_receive_skb(sk_pppox(po), skb, 0);
363 } 363 }
364drop: 364drop:
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index aab0be40d443..812dc3a65efb 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1104,7 +1104,7 @@ static netdev_tx_t tun_net_xmit(struct sk_buff *skb, struct net_device *dev)
1104 */ 1104 */
1105 skb_orphan(skb); 1105 skb_orphan(skb);
1106 1106
1107 nf_reset(skb); 1107 nf_reset_ct(skb);
1108 1108
1109 if (ptr_ring_produce(&tfile->tx_ring, skb)) 1109 if (ptr_ring_produce(&tfile->tx_ring, skb))
1110 goto drop; 1110 goto drop;
diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
index ce78714f536f..a505b2ab88b8 100644
--- a/drivers/net/usb/hso.c
+++ b/drivers/net/usb/hso.c
@@ -2620,14 +2620,18 @@ static struct hso_device *hso_create_bulk_serial_device(
2620 */ 2620 */
2621 if (serial->tiocmget) { 2621 if (serial->tiocmget) {
2622 tiocmget = serial->tiocmget; 2622 tiocmget = serial->tiocmget;
2623 tiocmget->endp = hso_get_ep(interface,
2624 USB_ENDPOINT_XFER_INT,
2625 USB_DIR_IN);
2626 if (!tiocmget->endp) {
2627 dev_err(&interface->dev, "Failed to find INT IN ep\n");
2628 goto exit;
2629 }
2630
2623 tiocmget->urb = usb_alloc_urb(0, GFP_KERNEL); 2631 tiocmget->urb = usb_alloc_urb(0, GFP_KERNEL);
2624 if (tiocmget->urb) { 2632 if (tiocmget->urb) {
2625 mutex_init(&tiocmget->mutex); 2633 mutex_init(&tiocmget->mutex);
2626 init_waitqueue_head(&tiocmget->waitq); 2634 init_waitqueue_head(&tiocmget->waitq);
2627 tiocmget->endp = hso_get_ep(
2628 interface,
2629 USB_ENDPOINT_XFER_INT,
2630 USB_DIR_IN);
2631 } else 2635 } else
2632 hso_free_tiomget(serial); 2636 hso_free_tiomget(serial);
2633 } 2637 }
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index b6dc5d714b5e..3d77cd402ba9 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -1350,6 +1350,7 @@ static const struct usb_device_id products[] = {
1350 {QMI_FIXED_INTF(0x1e2d, 0x0082, 4)}, /* Cinterion PHxx,PXxx (2 RmNet) */ 1350 {QMI_FIXED_INTF(0x1e2d, 0x0082, 4)}, /* Cinterion PHxx,PXxx (2 RmNet) */
1351 {QMI_FIXED_INTF(0x1e2d, 0x0082, 5)}, /* Cinterion PHxx,PXxx (2 RmNet) */ 1351 {QMI_FIXED_INTF(0x1e2d, 0x0082, 5)}, /* Cinterion PHxx,PXxx (2 RmNet) */
1352 {QMI_FIXED_INTF(0x1e2d, 0x0083, 4)}, /* Cinterion PHxx,PXxx (1 RmNet + USB Audio)*/ 1352 {QMI_FIXED_INTF(0x1e2d, 0x0083, 4)}, /* Cinterion PHxx,PXxx (1 RmNet + USB Audio)*/
1353 {QMI_QUIRK_SET_DTR(0x1e2d, 0x00b0, 4)}, /* Cinterion CLS8 */
1353 {QMI_FIXED_INTF(0x413c, 0x81a2, 8)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */ 1354 {QMI_FIXED_INTF(0x413c, 0x81a2, 8)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */
1354 {QMI_FIXED_INTF(0x413c, 0x81a3, 8)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */ 1355 {QMI_FIXED_INTF(0x413c, 0x81a3, 8)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */
1355 {QMI_FIXED_INTF(0x413c, 0x81a4, 8)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */ 1356 {QMI_FIXED_INTF(0x413c, 0x81a4, 8)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index 08726090570e..cee9fef925cd 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -4799,10 +4799,9 @@ static int rtl8152_reset_resume(struct usb_interface *intf)
4799 struct r8152 *tp = usb_get_intfdata(intf); 4799 struct r8152 *tp = usb_get_intfdata(intf);
4800 4800
4801 clear_bit(SELECTIVE_SUSPEND, &tp->flags); 4801 clear_bit(SELECTIVE_SUSPEND, &tp->flags);
4802 mutex_lock(&tp->control);
4803 tp->rtl_ops.init(tp); 4802 tp->rtl_ops.init(tp);
4804 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); 4803 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0);
4805 mutex_unlock(&tp->control); 4804 set_ethernet_addr(tp);
4806 return rtl8152_resume(intf); 4805 return rtl8152_resume(intf);
4807} 4806}
4808 4807
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index ba98e0971b84..5a635f028bdc 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -1585,7 +1585,7 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev)
1585 /* Don't wait up for transmitted skbs to be freed. */ 1585 /* Don't wait up for transmitted skbs to be freed. */
1586 if (!use_napi) { 1586 if (!use_napi) {
1587 skb_orphan(skb); 1587 skb_orphan(skb);
1588 nf_reset(skb); 1588 nf_reset_ct(skb);
1589 } 1589 }
1590 1590
1591 /* If running out of space, stop queue to avoid getting packets that we 1591 /* If running out of space, stop queue to avoid getting packets that we
diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
index a4b38a980c3c..ee52bde058df 100644
--- a/drivers/net/vrf.c
+++ b/drivers/net/vrf.c
@@ -366,7 +366,7 @@ static int vrf_finish_output6(struct net *net, struct sock *sk,
366 struct neighbour *neigh; 366 struct neighbour *neigh;
367 int ret; 367 int ret;
368 368
369 nf_reset(skb); 369 nf_reset_ct(skb);
370 370
371 skb->protocol = htons(ETH_P_IPV6); 371 skb->protocol = htons(ETH_P_IPV6);
372 skb->dev = dev; 372 skb->dev = dev;
@@ -459,7 +459,7 @@ static struct sk_buff *vrf_ip6_out_direct(struct net_device *vrf_dev,
459 459
460 /* reset skb device */ 460 /* reset skb device */
461 if (likely(err == 1)) 461 if (likely(err == 1))
462 nf_reset(skb); 462 nf_reset_ct(skb);
463 else 463 else
464 skb = NULL; 464 skb = NULL;
465 465
@@ -560,7 +560,7 @@ static int vrf_finish_output(struct net *net, struct sock *sk, struct sk_buff *s
560 bool is_v6gw = false; 560 bool is_v6gw = false;
561 int ret = -EINVAL; 561 int ret = -EINVAL;
562 562
563 nf_reset(skb); 563 nf_reset_ct(skb);
564 564
565 /* Be paranoid, rather than too clever. */ 565 /* Be paranoid, rather than too clever. */
566 if (unlikely(skb_headroom(skb) < hh_len && dev->header_ops)) { 566 if (unlikely(skb_headroom(skb) < hh_len && dev->header_ops)) {
@@ -670,7 +670,7 @@ static struct sk_buff *vrf_ip_out_direct(struct net_device *vrf_dev,
670 670
671 /* reset skb device */ 671 /* reset skb device */
672 if (likely(err == 1)) 672 if (likely(err == 1))
673 nf_reset(skb); 673 nf_reset_ct(skb);
674 else 674 else
675 skb = NULL; 675 skb = NULL;
676 676
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index 635956024e88..45c73a6f09a1 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -1261,8 +1261,8 @@ static bool mac80211_hwsim_tx_frame_no_nl(struct ieee80211_hw *hw,
1261 skb_orphan(skb); 1261 skb_orphan(skb);
1262 skb_dst_drop(skb); 1262 skb_dst_drop(skb);
1263 skb->mark = 0; 1263 skb->mark = 0;
1264 secpath_reset(skb); 1264 skb_ext_reset(skb);
1265 nf_reset(skb); 1265 nf_reset_ct(skb);
1266 1266
1267 /* 1267 /*
1268 * Get absolute mactime here so all HWs RX at the "same time", and 1268 * Get absolute mactime here so all HWs RX at the "same time", and
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
index e14ec75b61d6..482c6c8b0fb7 100644
--- a/drivers/net/xen-netfront.c
+++ b/drivers/net/xen-netfront.c
@@ -887,9 +887,9 @@ static int xennet_set_skb_gso(struct sk_buff *skb,
887 return 0; 887 return 0;
888} 888}
889 889
890static RING_IDX xennet_fill_frags(struct netfront_queue *queue, 890static int xennet_fill_frags(struct netfront_queue *queue,
891 struct sk_buff *skb, 891 struct sk_buff *skb,
892 struct sk_buff_head *list) 892 struct sk_buff_head *list)
893{ 893{
894 RING_IDX cons = queue->rx.rsp_cons; 894 RING_IDX cons = queue->rx.rsp_cons;
895 struct sk_buff *nskb; 895 struct sk_buff *nskb;
@@ -908,7 +908,7 @@ static RING_IDX xennet_fill_frags(struct netfront_queue *queue,
908 if (unlikely(skb_shinfo(skb)->nr_frags >= MAX_SKB_FRAGS)) { 908 if (unlikely(skb_shinfo(skb)->nr_frags >= MAX_SKB_FRAGS)) {
909 queue->rx.rsp_cons = ++cons + skb_queue_len(list); 909 queue->rx.rsp_cons = ++cons + skb_queue_len(list);
910 kfree_skb(nskb); 910 kfree_skb(nskb);
911 return ~0U; 911 return -ENOENT;
912 } 912 }
913 913
914 skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, 914 skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
@@ -919,7 +919,9 @@ static RING_IDX xennet_fill_frags(struct netfront_queue *queue,
919 kfree_skb(nskb); 919 kfree_skb(nskb);
920 } 920 }
921 921
922 return cons; 922 queue->rx.rsp_cons = cons;
923
924 return 0;
923} 925}
924 926
925static int checksum_setup(struct net_device *dev, struct sk_buff *skb) 927static int checksum_setup(struct net_device *dev, struct sk_buff *skb)
@@ -1045,8 +1047,7 @@ err:
1045 skb->data_len = rx->status; 1047 skb->data_len = rx->status;
1046 skb->len += rx->status; 1048 skb->len += rx->status;
1047 1049
1048 i = xennet_fill_frags(queue, skb, &tmpq); 1050 if (unlikely(xennet_fill_frags(queue, skb, &tmpq)))
1049 if (unlikely(i == ~0U))
1050 goto err; 1051 goto err;
1051 1052
1052 if (rx->flags & XEN_NETRXF_csum_blank) 1053 if (rx->flags & XEN_NETRXF_csum_blank)
@@ -1056,7 +1057,7 @@ err:
1056 1057
1057 __skb_queue_tail(&rxq, skb); 1058 __skb_queue_tail(&rxq, skb);
1058 1059
1059 queue->rx.rsp_cons = ++i; 1060 i = ++queue->rx.rsp_cons;
1060 work_done++; 1061 work_done++;
1061 } 1062 }
1062 1063
diff --git a/drivers/ptp/ptp_qoriq.c b/drivers/ptp/ptp_qoriq.c
index c61f00b72e15..a577218d1ab7 100644
--- a/drivers/ptp/ptp_qoriq.c
+++ b/drivers/ptp/ptp_qoriq.c
@@ -507,6 +507,8 @@ int ptp_qoriq_init(struct ptp_qoriq *ptp_qoriq, void __iomem *base,
507 ptp_qoriq->regs.etts_regs = base + ETTS_REGS_OFFSET; 507 ptp_qoriq->regs.etts_regs = base + ETTS_REGS_OFFSET;
508 } 508 }
509 509
510 spin_lock_init(&ptp_qoriq->lock);
511
510 ktime_get_real_ts64(&now); 512 ktime_get_real_ts64(&now);
511 ptp_qoriq_settime(&ptp_qoriq->caps, &now); 513 ptp_qoriq_settime(&ptp_qoriq->caps, &now);
512 514
@@ -514,7 +516,6 @@ int ptp_qoriq_init(struct ptp_qoriq *ptp_qoriq, void __iomem *base,
514 (ptp_qoriq->tclk_period & TCLK_PERIOD_MASK) << TCLK_PERIOD_SHIFT | 516 (ptp_qoriq->tclk_period & TCLK_PERIOD_MASK) << TCLK_PERIOD_SHIFT |
515 (ptp_qoriq->cksel & CKSEL_MASK) << CKSEL_SHIFT; 517 (ptp_qoriq->cksel & CKSEL_MASK) << CKSEL_SHIFT;
516 518
517 spin_lock_init(&ptp_qoriq->lock);
518 spin_lock_irqsave(&ptp_qoriq->lock, flags); 519 spin_lock_irqsave(&ptp_qoriq->lock, flags);
519 520
520 regs = &ptp_qoriq->regs; 521 regs = &ptp_qoriq->regs;
diff --git a/drivers/staging/octeon/ethernet-tx.c b/drivers/staging/octeon/ethernet-tx.c
index c64728fc21f2..a62057555d1b 100644
--- a/drivers/staging/octeon/ethernet-tx.c
+++ b/drivers/staging/octeon/ethernet-tx.c
@@ -349,10 +349,8 @@ int cvm_oct_xmit(struct sk_buff *skb, struct net_device *dev)
349 */ 349 */
350 dst_release(skb_dst(skb)); 350 dst_release(skb_dst(skb));
351 skb_dst_set(skb, NULL); 351 skb_dst_set(skb, NULL);
352#ifdef CONFIG_XFRM 352 skb_ext_reset(skb);
353 secpath_reset(skb); 353 nf_reset_ct(skb);
354#endif
355 nf_reset(skb);
356 354
357#ifdef CONFIG_NET_SCHED 355#ifdef CONFIG_NET_SCHED
358 skb->tc_index = 0; 356 skb->tc_index = 0;
diff --git a/include/linux/dsa/sja1105.h b/include/linux/dsa/sja1105.h
index 79435cfc20eb..897e799dbcb9 100644
--- a/include/linux/dsa/sja1105.h
+++ b/include/linux/dsa/sja1105.h
@@ -31,6 +31,8 @@
31#define SJA1105_META_SMAC 0x222222222222ull 31#define SJA1105_META_SMAC 0x222222222222ull
32#define SJA1105_META_DMAC 0x0180C200000Eull 32#define SJA1105_META_DMAC 0x0180C200000Eull
33 33
34#define SJA1105_HWTS_RX_EN 0
35
34/* Global tagger data: each struct sja1105_port has a reference to 36/* Global tagger data: each struct sja1105_port has a reference to
35 * the structure defined in struct sja1105_private. 37 * the structure defined in struct sja1105_private.
36 */ 38 */
@@ -42,7 +44,7 @@ struct sja1105_tagger_data {
42 * from taggers running on multiple ports on SMP systems 44 * from taggers running on multiple ports on SMP systems
43 */ 45 */
44 spinlock_t meta_lock; 46 spinlock_t meta_lock;
45 bool hwts_rx_en; 47 unsigned long state;
46}; 48};
47 49
48struct sja1105_skb_cb { 50struct sja1105_skb_cb {
diff --git a/include/linux/mii.h b/include/linux/mii.h
index 5cd824c1c0ca..4ce8901a1af6 100644
--- a/include/linux/mii.h
+++ b/include/linux/mii.h
@@ -455,6 +455,15 @@ static inline void mii_lpa_mod_linkmode_lpa_t(unsigned long *lp_advertising,
455 lp_advertising, lpa & LPA_LPACK); 455 lp_advertising, lpa & LPA_LPACK);
456} 456}
457 457
458static inline void mii_ctrl1000_mod_linkmode_adv_t(unsigned long *advertising,
459 u32 ctrl1000)
460{
461 linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT, advertising,
462 ctrl1000 & ADVERTISE_1000HALF);
463 linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, advertising,
464 ctrl1000 & ADVERTISE_1000FULL);
465}
466
458/** 467/**
459 * linkmode_adv_to_lcl_adv_t 468 * linkmode_adv_to_lcl_adv_t
460 * @advertising:pointer to linkmode advertising 469 * @advertising:pointer to linkmode advertising
diff --git a/include/linux/phy.h b/include/linux/phy.h
index a7ecbe0e55aa..9a0e981df502 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -678,6 +678,7 @@ static inline bool phy_is_started(struct phy_device *phydev)
678 return phydev->state >= PHY_UP; 678 return phydev->state >= PHY_UP;
679} 679}
680 680
681void phy_resolve_aneg_pause(struct phy_device *phydev);
681void phy_resolve_aneg_linkmode(struct phy_device *phydev); 682void phy_resolve_aneg_linkmode(struct phy_device *phydev);
682 683
683/** 684/**
@@ -1076,6 +1077,7 @@ int genphy_config_eee_advert(struct phy_device *phydev);
1076int __genphy_config_aneg(struct phy_device *phydev, bool changed); 1077int __genphy_config_aneg(struct phy_device *phydev, bool changed);
1077int genphy_aneg_done(struct phy_device *phydev); 1078int genphy_aneg_done(struct phy_device *phydev);
1078int genphy_update_link(struct phy_device *phydev); 1079int genphy_update_link(struct phy_device *phydev);
1080int genphy_read_lpa(struct phy_device *phydev);
1079int genphy_read_status(struct phy_device *phydev); 1081int genphy_read_status(struct phy_device *phydev);
1080int genphy_suspend(struct phy_device *phydev); 1082int genphy_suspend(struct phy_device *phydev);
1081int genphy_resume(struct phy_device *phydev); 1083int genphy_resume(struct phy_device *phydev);
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index e7d3b1a513ef..4351577b14d7 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -4160,15 +4160,12 @@ static inline void __skb_ext_copy(struct sk_buff *d, const struct sk_buff *s) {}
4160static inline void skb_ext_copy(struct sk_buff *dst, const struct sk_buff *s) {} 4160static inline void skb_ext_copy(struct sk_buff *dst, const struct sk_buff *s) {}
4161#endif /* CONFIG_SKB_EXTENSIONS */ 4161#endif /* CONFIG_SKB_EXTENSIONS */
4162 4162
4163static inline void nf_reset(struct sk_buff *skb) 4163static inline void nf_reset_ct(struct sk_buff *skb)
4164{ 4164{
4165#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) 4165#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
4166 nf_conntrack_put(skb_nfct(skb)); 4166 nf_conntrack_put(skb_nfct(skb));
4167 skb->_nfct = 0; 4167 skb->_nfct = 0;
4168#endif 4168#endif
4169#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
4170 skb_ext_del(skb, SKB_EXT_BRIDGE_NF);
4171#endif
4172} 4169}
4173 4170
4174static inline void nf_reset_trace(struct sk_buff *skb) 4171static inline void nf_reset_trace(struct sk_buff *skb)
diff --git a/include/trace/events/rxrpc.h b/include/trace/events/rxrpc.h
index a13a62db3565..edc5c887a44c 100644
--- a/include/trace/events/rxrpc.h
+++ b/include/trace/events/rxrpc.h
@@ -1068,7 +1068,7 @@ TRACE_EVENT(rxrpc_recvmsg,
1068 ), 1068 ),
1069 1069
1070 TP_fast_assign( 1070 TP_fast_assign(
1071 __entry->call = call->debug_id; 1071 __entry->call = call ? call->debug_id : 0;
1072 __entry->why = why; 1072 __entry->why = why;
1073 __entry->seq = seq; 1073 __entry->seq = seq;
1074 __entry->offset = offset; 1074 __entry->offset = offset;
diff --git a/lib/textsearch.c b/lib/textsearch.c
index 4f16eec5d554..f68dea8806be 100644
--- a/lib/textsearch.c
+++ b/lib/textsearch.c
@@ -89,9 +89,9 @@
89 * goto errout; 89 * goto errout;
90 * } 90 * }
91 * 91 *
92 * pos = textsearch_find_continuous(conf, \&state, example, strlen(example)); 92 * pos = textsearch_find_continuous(conf, &state, example, strlen(example));
93 * if (pos != UINT_MAX) 93 * if (pos != UINT_MAX)
94 * panic("Oh my god, dancing chickens at \%d\n", pos); 94 * panic("Oh my god, dancing chickens at %d\n", pos);
95 * 95 *
96 * textsearch_destroy(conf); 96 * textsearch_destroy(conf);
97 */ 97 */
diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
index a1146cb10919..9cbed6f5a85a 100644
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
@@ -436,7 +436,7 @@ void batadv_interface_rx(struct net_device *soft_iface,
436 /* clean the netfilter state now that the batman-adv header has been 436 /* clean the netfilter state now that the batman-adv header has been
437 * removed 437 * removed
438 */ 438 */
439 nf_reset(skb); 439 nf_reset_ct(skb);
440 440
441 if (unlikely(!pskb_may_pull(skb, ETH_HLEN))) 441 if (unlikely(!pskb_may_pull(skb, ETH_HLEN)))
442 goto dropped; 442 goto dropped;
diff --git a/net/core/devlink.c b/net/core/devlink.c
index e48680efe54a..f80151eeaf51 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -3172,7 +3172,7 @@ static int devlink_nl_cmd_param_get_dumpit(struct sk_buff *msg,
3172 NETLINK_CB(cb->skb).portid, 3172 NETLINK_CB(cb->skb).portid,
3173 cb->nlh->nlmsg_seq, 3173 cb->nlh->nlmsg_seq,
3174 NLM_F_MULTI); 3174 NLM_F_MULTI);
3175 if (err) { 3175 if (err && err != -EOPNOTSUPP) {
3176 mutex_unlock(&devlink->lock); 3176 mutex_unlock(&devlink->lock);
3177 goto out; 3177 goto out;
3178 } 3178 }
@@ -3432,7 +3432,7 @@ static int devlink_nl_cmd_port_param_get_dumpit(struct sk_buff *msg,
3432 NETLINK_CB(cb->skb).portid, 3432 NETLINK_CB(cb->skb).portid,
3433 cb->nlh->nlmsg_seq, 3433 cb->nlh->nlmsg_seq,
3434 NLM_F_MULTI); 3434 NLM_F_MULTI);
3435 if (err) { 3435 if (err && err != -EOPNOTSUPP) {
3436 mutex_unlock(&devlink->lock); 3436 mutex_unlock(&devlink->lock);
3437 goto out; 3437 goto out;
3438 } 3438 }
@@ -4088,7 +4088,7 @@ static int devlink_nl_cmd_info_get_dumpit(struct sk_buff *msg,
4088 cb->nlh->nlmsg_seq, NLM_F_MULTI, 4088 cb->nlh->nlmsg_seq, NLM_F_MULTI,
4089 cb->extack); 4089 cb->extack);
4090 mutex_unlock(&devlink->lock); 4090 mutex_unlock(&devlink->lock);
4091 if (err) 4091 if (err && err != -EOPNOTSUPP)
4092 break; 4092 break;
4093 idx++; 4093 idx++;
4094 } 4094 }
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 01d65206f4fb..529133611ea2 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -5120,7 +5120,7 @@ void skb_scrub_packet(struct sk_buff *skb, bool xnet)
5120 skb->ignore_df = 0; 5120 skb->ignore_df = 0;
5121 skb_dst_drop(skb); 5121 skb_dst_drop(skb);
5122 skb_ext_reset(skb); 5122 skb_ext_reset(skb);
5123 nf_reset(skb); 5123 nf_reset_ct(skb);
5124 nf_reset_trace(skb); 5124 nf_reset_trace(skb);
5125 5125
5126#ifdef CONFIG_NET_SWITCHDEV 5126#ifdef CONFIG_NET_SWITCHDEV
diff --git a/net/core/sock.c b/net/core/sock.c
index 07863edbe6fc..fac2b4d80de5 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -1700,8 +1700,6 @@ static void __sk_destruct(struct rcu_head *head)
1700 sk_filter_uncharge(sk, filter); 1700 sk_filter_uncharge(sk, filter);
1701 RCU_INIT_POINTER(sk->sk_filter, NULL); 1701 RCU_INIT_POINTER(sk->sk_filter, NULL);
1702 } 1702 }
1703 if (rcu_access_pointer(sk->sk_reuseport_cb))
1704 reuseport_detach_sock(sk);
1705 1703
1706 sock_disable_timestamp(sk, SK_FLAGS_TIMESTAMP); 1704 sock_disable_timestamp(sk, SK_FLAGS_TIMESTAMP);
1707 1705
@@ -1728,7 +1726,14 @@ static void __sk_destruct(struct rcu_head *head)
1728 1726
1729void sk_destruct(struct sock *sk) 1727void sk_destruct(struct sock *sk)
1730{ 1728{
1731 if (sock_flag(sk, SOCK_RCU_FREE)) 1729 bool use_call_rcu = sock_flag(sk, SOCK_RCU_FREE);
1730
1731 if (rcu_access_pointer(sk->sk_reuseport_cb)) {
1732 reuseport_detach_sock(sk);
1733 use_call_rcu = true;
1734 }
1735
1736 if (use_call_rcu)
1732 call_rcu(&sk->sk_rcu, __sk_destruct); 1737 call_rcu(&sk->sk_rcu, __sk_destruct);
1733 else 1738 else
1734 __sk_destruct(&sk->sk_rcu); 1739 __sk_destruct(&sk->sk_rcu);
@@ -3492,7 +3497,7 @@ static long sock_prot_memory_allocated(struct proto *proto)
3492 return proto->memory_allocated != NULL ? proto_memory_allocated(proto) : -1L; 3497 return proto->memory_allocated != NULL ? proto_memory_allocated(proto) : -1L;
3493} 3498}
3494 3499
3495static char *sock_prot_memory_pressure(struct proto *proto) 3500static const char *sock_prot_memory_pressure(struct proto *proto)
3496{ 3501{
3497 return proto->memory_pressure != NULL ? 3502 return proto->memory_pressure != NULL ?
3498 proto_memory_pressure(proto) ? "yes" : "no" : "NI"; 3503 proto_memory_pressure(proto) ? "yes" : "no" : "NI";
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c
index b685bc82f8d0..d9b4200ed12d 100644
--- a/net/dccp/ipv4.c
+++ b/net/dccp/ipv4.c
@@ -871,7 +871,7 @@ lookup:
871 871
872 if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb)) 872 if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb))
873 goto discard_and_relse; 873 goto discard_and_relse;
874 nf_reset(skb); 874 nf_reset_ct(skb);
875 875
876 return __sk_receive_skb(sk, skb, 1, dh->dccph_doff * 4, refcounted); 876 return __sk_receive_skb(sk, skb, 1, dh->dccph_doff * 4, refcounted);
877 877
diff --git a/net/dsa/tag_sja1105.c b/net/dsa/tag_sja1105.c
index 9c9aff3e52cf..63ef2a14c934 100644
--- a/net/dsa/tag_sja1105.c
+++ b/net/dsa/tag_sja1105.c
@@ -156,7 +156,11 @@ static struct sk_buff
156 /* Step 1: A timestampable frame was received. 156 /* Step 1: A timestampable frame was received.
157 * Buffer it until we get its meta frame. 157 * Buffer it until we get its meta frame.
158 */ 158 */
159 if (is_link_local && sp->data->hwts_rx_en) { 159 if (is_link_local) {
160 if (!test_bit(SJA1105_HWTS_RX_EN, &sp->data->state))
161 /* Do normal processing. */
162 return skb;
163
160 spin_lock(&sp->data->meta_lock); 164 spin_lock(&sp->data->meta_lock);
161 /* Was this a link-local frame instead of the meta 165 /* Was this a link-local frame instead of the meta
162 * that we were expecting? 166 * that we were expecting?
@@ -187,6 +191,12 @@ static struct sk_buff
187 } else if (is_meta) { 191 } else if (is_meta) {
188 struct sk_buff *stampable_skb; 192 struct sk_buff *stampable_skb;
189 193
194 /* Drop the meta frame if we're not in the right state
195 * to process it.
196 */
197 if (!test_bit(SJA1105_HWTS_RX_EN, &sp->data->state))
198 return NULL;
199
190 spin_lock(&sp->data->meta_lock); 200 spin_lock(&sp->data->meta_lock);
191 201
192 stampable_skb = sp->data->stampable_skb; 202 stampable_skb = sp->data->stampable_skb;
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
index a53a543fe055..52690bb3e40f 100644
--- a/net/ipv4/ip_gre.c
+++ b/net/ipv4/ip_gre.c
@@ -1446,6 +1446,7 @@ static void erspan_setup(struct net_device *dev)
1446 struct ip_tunnel *t = netdev_priv(dev); 1446 struct ip_tunnel *t = netdev_priv(dev);
1447 1447
1448 ether_setup(dev); 1448 ether_setup(dev);
1449 dev->max_mtu = 0;
1449 dev->netdev_ops = &erspan_netdev_ops; 1450 dev->netdev_ops = &erspan_netdev_ops;
1450 dev->priv_flags &= ~IFF_TX_SKB_SHARING; 1451 dev->priv_flags &= ~IFF_TX_SKB_SHARING;
1451 dev->priv_flags |= IFF_LIVE_ADDR_CHANGE; 1452 dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c
index 1e2392b7c64e..c59a78a267c3 100644
--- a/net/ipv4/ip_input.c
+++ b/net/ipv4/ip_input.c
@@ -199,7 +199,7 @@ resubmit:
199 kfree_skb(skb); 199 kfree_skb(skb);
200 return; 200 return;
201 } 201 }
202 nf_reset(skb); 202 nf_reset_ct(skb);
203 } 203 }
204 ret = INDIRECT_CALL_2(ipprot->handler, tcp_v4_rcv, udp_rcv, 204 ret = INDIRECT_CALL_2(ipprot->handler, tcp_v4_rcv, udp_rcv,
205 skb); 205 skb);
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c
index 313470f6bb14..716d5472c022 100644
--- a/net/ipv4/ipmr.c
+++ b/net/ipv4/ipmr.c
@@ -1794,7 +1794,7 @@ static void ip_encap(struct net *net, struct sk_buff *skb,
1794 ip_send_check(iph); 1794 ip_send_check(iph);
1795 1795
1796 memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); 1796 memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
1797 nf_reset(skb); 1797 nf_reset_ct(skb);
1798} 1798}
1799 1799
1800static inline int ipmr_forward_finish(struct net *net, struct sock *sk, 1800static inline int ipmr_forward_finish(struct net *net, struct sock *sk,
@@ -2140,7 +2140,7 @@ int ip_mr_input(struct sk_buff *skb)
2140 2140
2141 mroute_sk = rcu_dereference(mrt->mroute_sk); 2141 mroute_sk = rcu_dereference(mrt->mroute_sk);
2142 if (mroute_sk) { 2142 if (mroute_sk) {
2143 nf_reset(skb); 2143 nf_reset_ct(skb);
2144 raw_rcv(mroute_sk, skb); 2144 raw_rcv(mroute_sk, skb);
2145 return 0; 2145 return 0;
2146 } 2146 }
diff --git a/net/ipv4/netfilter/nf_dup_ipv4.c b/net/ipv4/netfilter/nf_dup_ipv4.c
index af3fbf76dbd3..6cc5743c553a 100644
--- a/net/ipv4/netfilter/nf_dup_ipv4.c
+++ b/net/ipv4/netfilter/nf_dup_ipv4.c
@@ -65,7 +65,7 @@ void nf_dup_ipv4(struct net *net, struct sk_buff *skb, unsigned int hooknum,
65 65
66#if IS_ENABLED(CONFIG_NF_CONNTRACK) 66#if IS_ENABLED(CONFIG_NF_CONNTRACK)
67 /* Avoid counting cloned packets towards the original connection. */ 67 /* Avoid counting cloned packets towards the original connection. */
68 nf_reset(skb); 68 nf_reset_ct(skb);
69 nf_ct_set(skb, NULL, IP_CT_UNTRACKED); 69 nf_ct_set(skb, NULL, IP_CT_UNTRACKED);
70#endif 70#endif
71 /* 71 /*
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
index 80da5a66d5d7..3183413ebc6c 100644
--- a/net/ipv4/raw.c
+++ b/net/ipv4/raw.c
@@ -332,7 +332,7 @@ int raw_rcv(struct sock *sk, struct sk_buff *skb)
332 kfree_skb(skb); 332 kfree_skb(skb);
333 return NET_RX_DROP; 333 return NET_RX_DROP;
334 } 334 }
335 nf_reset(skb); 335 nf_reset_ct(skb);
336 336
337 skb_push(skb, skb->data - skb_network_header(skb)); 337 skb_push(skb, skb->data - skb_network_header(skb));
338 338
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index 7dcce724c78b..14654876127e 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -916,16 +916,15 @@ void ip_rt_send_redirect(struct sk_buff *skb)
916 if (peer->rate_tokens == 0 || 916 if (peer->rate_tokens == 0 ||
917 time_after(jiffies, 917 time_after(jiffies,
918 (peer->rate_last + 918 (peer->rate_last +
919 (ip_rt_redirect_load << peer->rate_tokens)))) { 919 (ip_rt_redirect_load << peer->n_redirects)))) {
920 __be32 gw = rt_nexthop(rt, ip_hdr(skb)->daddr); 920 __be32 gw = rt_nexthop(rt, ip_hdr(skb)->daddr);
921 921
922 icmp_send(skb, ICMP_REDIRECT, ICMP_REDIR_HOST, gw); 922 icmp_send(skb, ICMP_REDIRECT, ICMP_REDIR_HOST, gw);
923 peer->rate_last = jiffies; 923 peer->rate_last = jiffies;
924 ++peer->rate_tokens;
925 ++peer->n_redirects; 924 ++peer->n_redirects;
926#ifdef CONFIG_IP_ROUTE_VERBOSE 925#ifdef CONFIG_IP_ROUTE_VERBOSE
927 if (log_martians && 926 if (log_martians &&
928 peer->rate_tokens == ip_rt_redirect_number) 927 peer->n_redirects == ip_rt_redirect_number)
929 net_warn_ratelimited("host %pI4/if%d ignores redirects for %pI4 to %pI4\n", 928 net_warn_ratelimited("host %pI4/if%d ignores redirects for %pI4 to %pI4\n",
930 &ip_hdr(skb)->saddr, inet_iif(skb), 929 &ip_hdr(skb)->saddr, inet_iif(skb),
931 &ip_hdr(skb)->daddr, &gw); 930 &ip_hdr(skb)->daddr, &gw);
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 79c325a07ba5..f98a1882e537 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -1798,13 +1798,11 @@ static int tcp_zerocopy_receive(struct sock *sk,
1798 } 1798 }
1799 if (skb_frag_size(frags) != PAGE_SIZE || skb_frag_off(frags)) { 1799 if (skb_frag_size(frags) != PAGE_SIZE || skb_frag_off(frags)) {
1800 int remaining = zc->recv_skip_hint; 1800 int remaining = zc->recv_skip_hint;
1801 int size = skb_frag_size(frags);
1802 1801
1803 while (remaining && (size != PAGE_SIZE || 1802 while (remaining && (skb_frag_size(frags) != PAGE_SIZE ||
1804 skb_frag_off(frags))) { 1803 skb_frag_off(frags))) {
1805 remaining -= size; 1804 remaining -= skb_frag_size(frags);
1806 frags++; 1805 frags++;
1807 size = skb_frag_size(frags);
1808 } 1806 }
1809 zc->recv_skip_hint -= remaining; 1807 zc->recv_skip_hint -= remaining;
1810 break; 1808 break;
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 2ee45e3755e9..bf124b1742df 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -1916,7 +1916,7 @@ process:
1916 if (tcp_v4_inbound_md5_hash(sk, skb)) 1916 if (tcp_v4_inbound_md5_hash(sk, skb))
1917 goto discard_and_relse; 1917 goto discard_and_relse;
1918 1918
1919 nf_reset(skb); 1919 nf_reset_ct(skb);
1920 1920
1921 if (tcp_filter(sk, skb)) 1921 if (tcp_filter(sk, skb))
1922 goto discard_and_relse; 1922 goto discard_and_relse;
diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c
index 40de2d2364a1..05be564414e9 100644
--- a/net/ipv4/tcp_timer.c
+++ b/net/ipv4/tcp_timer.c
@@ -198,8 +198,13 @@ static bool retransmits_timed_out(struct sock *sk,
198 return false; 198 return false;
199 199
200 start_ts = tcp_sk(sk)->retrans_stamp; 200 start_ts = tcp_sk(sk)->retrans_stamp;
201 if (likely(timeout == 0)) 201 if (likely(timeout == 0)) {
202 timeout = tcp_model_timeout(sk, boundary, TCP_RTO_MIN); 202 unsigned int rto_base = TCP_RTO_MIN;
203
204 if ((1 << sk->sk_state) & (TCPF_SYN_SENT | TCPF_SYN_RECV))
205 rto_base = tcp_timeout_init(sk);
206 timeout = tcp_model_timeout(sk, boundary, rto_base);
207 }
203 208
204 return (s32)(tcp_time_stamp(tcp_sk(sk)) - start_ts - timeout) >= 0; 209 return (s32)(tcp_time_stamp(tcp_sk(sk)) - start_ts - timeout) >= 0;
205} 210}
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index cf755156a684..14bc654b6842 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -821,6 +821,7 @@ static int udp_send_skb(struct sk_buff *skb, struct flowi4 *fl4,
821 int is_udplite = IS_UDPLITE(sk); 821 int is_udplite = IS_UDPLITE(sk);
822 int offset = skb_transport_offset(skb); 822 int offset = skb_transport_offset(skb);
823 int len = skb->len - offset; 823 int len = skb->len - offset;
824 int datalen = len - sizeof(*uh);
824 __wsum csum = 0; 825 __wsum csum = 0;
825 826
826 /* 827 /*
@@ -854,10 +855,12 @@ static int udp_send_skb(struct sk_buff *skb, struct flowi4 *fl4,
854 return -EIO; 855 return -EIO;
855 } 856 }
856 857
857 skb_shinfo(skb)->gso_size = cork->gso_size; 858 if (datalen > cork->gso_size) {
858 skb_shinfo(skb)->gso_type = SKB_GSO_UDP_L4; 859 skb_shinfo(skb)->gso_size = cork->gso_size;
859 skb_shinfo(skb)->gso_segs = DIV_ROUND_UP(len - sizeof(uh), 860 skb_shinfo(skb)->gso_type = SKB_GSO_UDP_L4;
860 cork->gso_size); 861 skb_shinfo(skb)->gso_segs = DIV_ROUND_UP(datalen,
862 cork->gso_size);
863 }
861 goto csum_partial; 864 goto csum_partial;
862 } 865 }
863 866
@@ -1969,7 +1972,7 @@ static int udp_queue_rcv_one_skb(struct sock *sk, struct sk_buff *skb)
1969 */ 1972 */
1970 if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb)) 1973 if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb))
1971 goto drop; 1974 goto drop;
1972 nf_reset(skb); 1975 nf_reset_ct(skb);
1973 1976
1974 if (static_branch_unlikely(&udp_encap_needed_key) && up->encap_type) { 1977 if (static_branch_unlikely(&udp_encap_needed_key) && up->encap_type) {
1975 int (*encap_rcv)(struct sock *sk, struct sk_buff *skb); 1978 int (*encap_rcv)(struct sock *sk, struct sk_buff *skb);
@@ -2298,7 +2301,7 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
2298 2301
2299 if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) 2302 if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb))
2300 goto drop; 2303 goto drop;
2301 nf_reset(skb); 2304 nf_reset_ct(skb);
2302 2305
2303 /* No socket. Drop packet silently, if checksum is wrong */ 2306 /* No socket. Drop packet silently, if checksum is wrong */
2304 if (udp_lib_checksum_complete(skb)) 2307 if (udp_lib_checksum_complete(skb))
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 6a576ff92c39..34ccef18b40e 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -5964,13 +5964,20 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
5964 switch (event) { 5964 switch (event) {
5965 case RTM_NEWADDR: 5965 case RTM_NEWADDR:
5966 /* 5966 /*
5967 * If the address was optimistic 5967 * If the address was optimistic we inserted the route at the
5968 * we inserted the route at the start of 5968 * start of our DAD process, so we don't need to do it again.
5969 * our DAD process, so we don't need 5969 * If the device was taken down in the middle of the DAD
5970 * to do it again 5970 * cycle there is a race where we could get here without a
5971 * host route, so nothing to insert. That will be fixed when
5972 * the device is brought up.
5971 */ 5973 */
5972 if (!rcu_access_pointer(ifp->rt->fib6_node)) 5974 if (ifp->rt && !rcu_access_pointer(ifp->rt->fib6_node)) {
5973 ip6_ins_rt(net, ifp->rt); 5975 ip6_ins_rt(net, ifp->rt);
5976 } else if (!ifp->rt && (ifp->idev->dev->flags & IFF_UP)) {
5977 pr_warn("BUG: Address %pI6c on device %s is missing its host route.\n",
5978 &ifp->addr, ifp->idev->dev->name);
5979 }
5980
5974 if (ifp->idev->cnf.forwarding) 5981 if (ifp->idev->cnf.forwarding)
5975 addrconf_join_anycast(ifp); 5982 addrconf_join_anycast(ifp);
5976 if (!ipv6_addr_any(&ifp->peer_addr)) 5983 if (!ipv6_addr_any(&ifp->peer_addr))
diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c
index d432d0011c16..3d71c7d6102c 100644
--- a/net/ipv6/ip6_input.c
+++ b/net/ipv6/ip6_input.c
@@ -223,6 +223,16 @@ static struct sk_buff *ip6_rcv_core(struct sk_buff *skb, struct net_device *dev,
223 if (ipv6_addr_is_multicast(&hdr->saddr)) 223 if (ipv6_addr_is_multicast(&hdr->saddr))
224 goto err; 224 goto err;
225 225
226 /* While RFC4291 is not explicit about v4mapped addresses
227 * in IPv6 headers, it seems clear linux dual-stack
228 * model can not deal properly with these.
229 * Security models could be fooled by ::ffff:127.0.0.1 for example.
230 *
231 * https://tools.ietf.org/html/draft-itojun-v6ops-v4mapped-harmful-02
232 */
233 if (ipv6_addr_v4mapped(&hdr->saddr))
234 goto err;
235
226 skb->transport_header = skb->network_header + sizeof(*hdr); 236 skb->transport_header = skb->network_header + sizeof(*hdr);
227 IP6CB(skb)->nhoff = offsetof(struct ipv6hdr, nexthdr); 237 IP6CB(skb)->nhoff = offsetof(struct ipv6hdr, nexthdr);
228 238
@@ -371,7 +381,7 @@ resubmit_final:
371 /* Free reference early: we don't need it any more, 381 /* Free reference early: we don't need it any more,
372 and it may hold ip_conntrack module loaded 382 and it may hold ip_conntrack module loaded
373 indefinitely. */ 383 indefinitely. */
374 nf_reset(skb); 384 nf_reset_ct(skb);
375 385
376 skb_postpull_rcsum(skb, skb_network_header(skb), 386 skb_postpull_rcsum(skb, skb_network_header(skb),
377 skb_network_header_len(skb)); 387 skb_network_header_len(skb));
diff --git a/net/ipv6/netfilter/nf_dup_ipv6.c b/net/ipv6/netfilter/nf_dup_ipv6.c
index e6c9da9866b1..a0a2de30be3e 100644
--- a/net/ipv6/netfilter/nf_dup_ipv6.c
+++ b/net/ipv6/netfilter/nf_dup_ipv6.c
@@ -54,7 +54,7 @@ void nf_dup_ipv6(struct net *net, struct sk_buff *skb, unsigned int hooknum,
54 return; 54 return;
55 55
56#if IS_ENABLED(CONFIG_NF_CONNTRACK) 56#if IS_ENABLED(CONFIG_NF_CONNTRACK)
57 nf_reset(skb); 57 nf_reset_ct(skb);
58 nf_ct_set(skb, NULL, IP_CT_UNTRACKED); 58 nf_ct_set(skb, NULL, IP_CT_UNTRACKED);
59#endif 59#endif
60 if (hooknum == NF_INET_PRE_ROUTING || 60 if (hooknum == NF_INET_PRE_ROUTING ||
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
index 6e1888ee4036..a77f6b7d3a7c 100644
--- a/net/ipv6/raw.c
+++ b/net/ipv6/raw.c
@@ -215,7 +215,7 @@ static bool ipv6_raw_deliver(struct sk_buff *skb, int nexthdr)
215 215
216 /* Not releasing hash table! */ 216 /* Not releasing hash table! */
217 if (clone) { 217 if (clone) {
218 nf_reset(clone); 218 nf_reset_ct(clone);
219 rawv6_rcv(sk, clone); 219 rawv6_rcv(sk, clone);
220 } 220 }
221 } 221 }
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index aae4938f3dea..6324d3a8cb53 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -1109,6 +1109,7 @@ static int udp_v6_send_skb(struct sk_buff *skb, struct flowi6 *fl6,
1109 __wsum csum = 0; 1109 __wsum csum = 0;
1110 int offset = skb_transport_offset(skb); 1110 int offset = skb_transport_offset(skb);
1111 int len = skb->len - offset; 1111 int len = skb->len - offset;
1112 int datalen = len - sizeof(*uh);
1112 1113
1113 /* 1114 /*
1114 * Create a UDP header 1115 * Create a UDP header
@@ -1141,8 +1142,12 @@ static int udp_v6_send_skb(struct sk_buff *skb, struct flowi6 *fl6,
1141 return -EIO; 1142 return -EIO;
1142 } 1143 }
1143 1144
1144 skb_shinfo(skb)->gso_size = cork->gso_size; 1145 if (datalen > cork->gso_size) {
1145 skb_shinfo(skb)->gso_type = SKB_GSO_UDP_L4; 1146 skb_shinfo(skb)->gso_size = cork->gso_size;
1147 skb_shinfo(skb)->gso_type = SKB_GSO_UDP_L4;
1148 skb_shinfo(skb)->gso_segs = DIV_ROUND_UP(datalen,
1149 cork->gso_size);
1150 }
1146 goto csum_partial; 1151 goto csum_partial;
1147 } 1152 }
1148 1153
diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c
index 105e5a7092e7..f82ea12bac37 100644
--- a/net/l2tp/l2tp_core.c
+++ b/net/l2tp/l2tp_core.c
@@ -1078,7 +1078,7 @@ int l2tp_xmit_skb(struct l2tp_session *session, struct sk_buff *skb, int hdr_len
1078 memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); 1078 memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
1079 IPCB(skb)->flags &= ~(IPSKB_XFRM_TUNNEL_SIZE | IPSKB_XFRM_TRANSFORMED | 1079 IPCB(skb)->flags &= ~(IPSKB_XFRM_TUNNEL_SIZE | IPSKB_XFRM_TRANSFORMED |
1080 IPSKB_REROUTED); 1080 IPSKB_REROUTED);
1081 nf_reset(skb); 1081 nf_reset_ct(skb);
1082 1082
1083 bh_lock_sock(sk); 1083 bh_lock_sock(sk);
1084 if (sock_owned_by_user(sk)) { 1084 if (sock_owned_by_user(sk)) {
diff --git a/net/l2tp/l2tp_eth.c b/net/l2tp/l2tp_eth.c
index bd3f39349d40..fd5ac2788e45 100644
--- a/net/l2tp/l2tp_eth.c
+++ b/net/l2tp/l2tp_eth.c
@@ -151,7 +151,7 @@ static void l2tp_eth_dev_recv(struct l2tp_session *session, struct sk_buff *skb,
151 skb->ip_summed = CHECKSUM_NONE; 151 skb->ip_summed = CHECKSUM_NONE;
152 152
153 skb_dst_drop(skb); 153 skb_dst_drop(skb);
154 nf_reset(skb); 154 nf_reset_ct(skb);
155 155
156 rcu_read_lock(); 156 rcu_read_lock();
157 dev = rcu_dereference(spriv->dev); 157 dev = rcu_dereference(spriv->dev);
diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
index 622833317dcb..0d7c887a2b75 100644
--- a/net/l2tp/l2tp_ip.c
+++ b/net/l2tp/l2tp_ip.c
@@ -193,7 +193,7 @@ pass_up:
193 if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb)) 193 if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb))
194 goto discard_put; 194 goto discard_put;
195 195
196 nf_reset(skb); 196 nf_reset_ct(skb);
197 197
198 return sk_receive_skb(sk, skb, 1); 198 return sk_receive_skb(sk, skb, 1);
199 199
diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c
index 687e23a8b326..802f19aba7e3 100644
--- a/net/l2tp/l2tp_ip6.c
+++ b/net/l2tp/l2tp_ip6.c
@@ -206,7 +206,7 @@ pass_up:
206 if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb)) 206 if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb))
207 goto discard_put; 207 goto discard_put;
208 208
209 nf_reset(skb); 209 nf_reset_ct(skb);
210 210
211 return sk_receive_skb(sk, skb, 1); 211 return sk_receive_skb(sk, skb, 1);
212 212
diff --git a/net/mac80211/debugfs_netdev.c b/net/mac80211/debugfs_netdev.c
index b1438fd4d876..64b544ae9966 100644
--- a/net/mac80211/debugfs_netdev.c
+++ b/net/mac80211/debugfs_netdev.c
@@ -487,9 +487,14 @@ static ssize_t ieee80211_if_fmt_aqm(
487 const struct ieee80211_sub_if_data *sdata, char *buf, int buflen) 487 const struct ieee80211_sub_if_data *sdata, char *buf, int buflen)
488{ 488{
489 struct ieee80211_local *local = sdata->local; 489 struct ieee80211_local *local = sdata->local;
490 struct txq_info *txqi = to_txq_info(sdata->vif.txq); 490 struct txq_info *txqi;
491 int len; 491 int len;
492 492
493 if (!sdata->vif.txq)
494 return 0;
495
496 txqi = to_txq_info(sdata->vif.txq);
497
493 spin_lock_bh(&local->fq.lock); 498 spin_lock_bh(&local->fq.lock);
494 rcu_read_lock(); 499 rcu_read_lock();
495 500
@@ -658,7 +663,9 @@ static void add_common_files(struct ieee80211_sub_if_data *sdata)
658 DEBUGFS_ADD(rc_rateidx_vht_mcs_mask_5ghz); 663 DEBUGFS_ADD(rc_rateidx_vht_mcs_mask_5ghz);
659 DEBUGFS_ADD(hw_queues); 664 DEBUGFS_ADD(hw_queues);
660 665
661 if (sdata->local->ops->wake_tx_queue) 666 if (sdata->local->ops->wake_tx_queue &&
667 sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE &&
668 sdata->vif.type != NL80211_IFTYPE_NAN)
662 DEBUGFS_ADD(aqm); 669 DEBUGFS_ADD(aqm);
663} 670}
664 671
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index 051a02ddcb85..32a7a53833c0 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -247,7 +247,8 @@ static void __ieee80211_wake_txqs(struct ieee80211_sub_if_data *sdata, int ac)
247 struct sta_info *sta; 247 struct sta_info *sta;
248 int i; 248 int i;
249 249
250 spin_lock_bh(&fq->lock); 250 local_bh_disable();
251 spin_lock(&fq->lock);
251 252
252 if (sdata->vif.type == NL80211_IFTYPE_AP) 253 if (sdata->vif.type == NL80211_IFTYPE_AP)
253 ps = &sdata->bss->ps; 254 ps = &sdata->bss->ps;
@@ -273,9 +274,9 @@ static void __ieee80211_wake_txqs(struct ieee80211_sub_if_data *sdata, int ac)
273 &txqi->flags)) 274 &txqi->flags))
274 continue; 275 continue;
275 276
276 spin_unlock_bh(&fq->lock); 277 spin_unlock(&fq->lock);
277 drv_wake_tx_queue(local, txqi); 278 drv_wake_tx_queue(local, txqi);
278 spin_lock_bh(&fq->lock); 279 spin_lock(&fq->lock);
279 } 280 }
280 } 281 }
281 282
@@ -288,12 +289,14 @@ static void __ieee80211_wake_txqs(struct ieee80211_sub_if_data *sdata, int ac)
288 (ps && atomic_read(&ps->num_sta_ps)) || ac != vif->txq->ac) 289 (ps && atomic_read(&ps->num_sta_ps)) || ac != vif->txq->ac)
289 goto out; 290 goto out;
290 291
291 spin_unlock_bh(&fq->lock); 292 spin_unlock(&fq->lock);
292 293
293 drv_wake_tx_queue(local, txqi); 294 drv_wake_tx_queue(local, txqi);
295 local_bh_enable();
294 return; 296 return;
295out: 297out:
296 spin_unlock_bh(&fq->lock); 298 spin_unlock(&fq->lock);
299 local_bh_enable();
297} 300}
298 301
299static void 302static void
diff --git a/net/netfilter/ipvs/ip_vs_xmit.c b/net/netfilter/ipvs/ip_vs_xmit.c
index 9c464d24beec..888d3068a492 100644
--- a/net/netfilter/ipvs/ip_vs_xmit.c
+++ b/net/netfilter/ipvs/ip_vs_xmit.c
@@ -613,7 +613,7 @@ static inline int ip_vs_tunnel_xmit_prepare(struct sk_buff *skb,
613 if (unlikely(cp->flags & IP_VS_CONN_F_NFCT)) 613 if (unlikely(cp->flags & IP_VS_CONN_F_NFCT))
614 ret = ip_vs_confirm_conntrack(skb); 614 ret = ip_vs_confirm_conntrack(skb);
615 if (ret == NF_ACCEPT) { 615 if (ret == NF_ACCEPT) {
616 nf_reset(skb); 616 nf_reset_ct(skb);
617 skb_forward_csum(skb); 617 skb_forward_csum(skb);
618 } 618 }
619 return ret; 619 return ret;
diff --git a/net/netfilter/nft_connlimit.c b/net/netfilter/nft_connlimit.c
index af1497ab9464..69d6173f91e2 100644
--- a/net/netfilter/nft_connlimit.c
+++ b/net/netfilter/nft_connlimit.c
@@ -218,8 +218,13 @@ static void nft_connlimit_destroy_clone(const struct nft_ctx *ctx,
218static bool nft_connlimit_gc(struct net *net, const struct nft_expr *expr) 218static bool nft_connlimit_gc(struct net *net, const struct nft_expr *expr)
219{ 219{
220 struct nft_connlimit *priv = nft_expr_priv(expr); 220 struct nft_connlimit *priv = nft_expr_priv(expr);
221 bool ret;
221 222
222 return nf_conncount_gc_list(net, &priv->list); 223 local_bh_disable();
224 ret = nf_conncount_gc_list(net, &priv->list);
225 local_bh_enable();
226
227 return ret;
223} 228}
224 229
225static struct nft_expr_type nft_connlimit_type; 230static struct nft_expr_type nft_connlimit_type;
diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c
index 8dfea26536c9..ccdd790e163a 100644
--- a/net/nfc/llcp_sock.c
+++ b/net/nfc/llcp_sock.c
@@ -107,9 +107,14 @@ static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
107 llcp_sock->service_name = kmemdup(llcp_addr.service_name, 107 llcp_sock->service_name = kmemdup(llcp_addr.service_name,
108 llcp_sock->service_name_len, 108 llcp_sock->service_name_len,
109 GFP_KERNEL); 109 GFP_KERNEL);
110 110 if (!llcp_sock->service_name) {
111 ret = -ENOMEM;
112 goto put_dev;
113 }
111 llcp_sock->ssap = nfc_llcp_get_sdp_ssap(local, llcp_sock); 114 llcp_sock->ssap = nfc_llcp_get_sdp_ssap(local, llcp_sock);
112 if (llcp_sock->ssap == LLCP_SAP_MAX) { 115 if (llcp_sock->ssap == LLCP_SAP_MAX) {
116 kfree(llcp_sock->service_name);
117 llcp_sock->service_name = NULL;
113 ret = -EADDRINUSE; 118 ret = -EADDRINUSE;
114 goto put_dev; 119 goto put_dev;
115 } 120 }
diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c
index d2437b5b2f6a..21c90d3a7ebf 100644
--- a/net/openvswitch/vport-internal_dev.c
+++ b/net/openvswitch/vport-internal_dev.c
@@ -237,7 +237,7 @@ static netdev_tx_t internal_dev_recv(struct sk_buff *skb)
237 } 237 }
238 238
239 skb_dst_drop(skb); 239 skb_dst_drop(skb);
240 nf_reset(skb); 240 nf_reset_ct(skb);
241 secpath_reset(skb); 241 secpath_reset(skb);
242 242
243 skb->pkt_type = PACKET_HOST; 243 skb->pkt_type = PACKET_HOST;
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index e2742b006d25..82a50e850245 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -1821,7 +1821,7 @@ static int packet_rcv_spkt(struct sk_buff *skb, struct net_device *dev,
1821 skb_dst_drop(skb); 1821 skb_dst_drop(skb);
1822 1822
1823 /* drop conntrack reference */ 1823 /* drop conntrack reference */
1824 nf_reset(skb); 1824 nf_reset_ct(skb);
1825 1825
1826 spkt = &PACKET_SKB_CB(skb)->sa.pkt; 1826 spkt = &PACKET_SKB_CB(skb)->sa.pkt;
1827 1827
@@ -2121,7 +2121,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
2121 skb_dst_drop(skb); 2121 skb_dst_drop(skb);
2122 2122
2123 /* drop conntrack reference */ 2123 /* drop conntrack reference */
2124 nf_reset(skb); 2124 nf_reset_ct(skb);
2125 2125
2126 spin_lock(&sk->sk_receive_queue.lock); 2126 spin_lock(&sk->sk_receive_queue.lock);
2127 po->stats.stats1.tp_packets++; 2127 po->stats.stats1.tp_packets++;
diff --git a/net/rds/ib.c b/net/rds/ib.c
index 45acab2de0cf..9de2ae22d583 100644
--- a/net/rds/ib.c
+++ b/net/rds/ib.c
@@ -143,6 +143,9 @@ static void rds_ib_add_one(struct ib_device *device)
143 refcount_set(&rds_ibdev->refcount, 1); 143 refcount_set(&rds_ibdev->refcount, 1);
144 INIT_WORK(&rds_ibdev->free_work, rds_ib_dev_free); 144 INIT_WORK(&rds_ibdev->free_work, rds_ib_dev_free);
145 145
146 INIT_LIST_HEAD(&rds_ibdev->ipaddr_list);
147 INIT_LIST_HEAD(&rds_ibdev->conn_list);
148
146 rds_ibdev->max_wrs = device->attrs.max_qp_wr; 149 rds_ibdev->max_wrs = device->attrs.max_qp_wr;
147 rds_ibdev->max_sge = min(device->attrs.max_send_sge, RDS_IB_MAX_SGE); 150 rds_ibdev->max_sge = min(device->attrs.max_send_sge, RDS_IB_MAX_SGE);
148 151
@@ -203,9 +206,6 @@ static void rds_ib_add_one(struct ib_device *device)
203 device->name, 206 device->name,
204 rds_ibdev->use_fastreg ? "FRMR" : "FMR"); 207 rds_ibdev->use_fastreg ? "FRMR" : "FMR");
205 208
206 INIT_LIST_HEAD(&rds_ibdev->ipaddr_list);
207 INIT_LIST_HEAD(&rds_ibdev->conn_list);
208
209 down_write(&rds_ib_devices_lock); 209 down_write(&rds_ib_devices_lock);
210 list_add_tail_rcu(&rds_ibdev->list, &rds_ib_devices); 210 list_add_tail_rcu(&rds_ibdev->list, &rds_ib_devices);
211 up_write(&rds_ib_devices_lock); 211 up_write(&rds_ib_devices_lock);
diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c
index 06c7a2da21bc..39b427dc7512 100644
--- a/net/sched/sch_cbq.c
+++ b/net/sched/sch_cbq.c
@@ -1127,6 +1127,33 @@ static const struct nla_policy cbq_policy[TCA_CBQ_MAX + 1] = {
1127 [TCA_CBQ_POLICE] = { .len = sizeof(struct tc_cbq_police) }, 1127 [TCA_CBQ_POLICE] = { .len = sizeof(struct tc_cbq_police) },
1128}; 1128};
1129 1129
1130static int cbq_opt_parse(struct nlattr *tb[TCA_CBQ_MAX + 1],
1131 struct nlattr *opt,
1132 struct netlink_ext_ack *extack)
1133{
1134 int err;
1135
1136 if (!opt) {
1137 NL_SET_ERR_MSG(extack, "CBQ options are required for this operation");
1138 return -EINVAL;
1139 }
1140
1141 err = nla_parse_nested_deprecated(tb, TCA_CBQ_MAX, opt,
1142 cbq_policy, extack);
1143 if (err < 0)
1144 return err;
1145
1146 if (tb[TCA_CBQ_WRROPT]) {
1147 const struct tc_cbq_wrropt *wrr = nla_data(tb[TCA_CBQ_WRROPT]);
1148
1149 if (wrr->priority > TC_CBQ_MAXPRIO) {
1150 NL_SET_ERR_MSG(extack, "priority is bigger than TC_CBQ_MAXPRIO");
1151 err = -EINVAL;
1152 }
1153 }
1154 return err;
1155}
1156
1130static int cbq_init(struct Qdisc *sch, struct nlattr *opt, 1157static int cbq_init(struct Qdisc *sch, struct nlattr *opt,
1131 struct netlink_ext_ack *extack) 1158 struct netlink_ext_ack *extack)
1132{ 1159{
@@ -1139,13 +1166,7 @@ static int cbq_init(struct Qdisc *sch, struct nlattr *opt,
1139 hrtimer_init(&q->delay_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_PINNED); 1166 hrtimer_init(&q->delay_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_PINNED);
1140 q->delay_timer.function = cbq_undelay; 1167 q->delay_timer.function = cbq_undelay;
1141 1168
1142 if (!opt) { 1169 err = cbq_opt_parse(tb, opt, extack);
1143 NL_SET_ERR_MSG(extack, "CBQ options are required for this operation");
1144 return -EINVAL;
1145 }
1146
1147 err = nla_parse_nested_deprecated(tb, TCA_CBQ_MAX, opt, cbq_policy,
1148 extack);
1149 if (err < 0) 1170 if (err < 0)
1150 return err; 1171 return err;
1151 1172
@@ -1464,13 +1485,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t
1464 struct cbq_class *parent; 1485 struct cbq_class *parent;
1465 struct qdisc_rate_table *rtab = NULL; 1486 struct qdisc_rate_table *rtab = NULL;
1466 1487
1467 if (!opt) { 1488 err = cbq_opt_parse(tb, opt, extack);
1468 NL_SET_ERR_MSG(extack, "Mandatory qdisc options missing");
1469 return -EINVAL;
1470 }
1471
1472 err = nla_parse_nested_deprecated(tb, TCA_CBQ_MAX, opt, cbq_policy,
1473 extack);
1474 if (err < 0) 1489 if (err < 0)
1475 return err; 1490 return err;
1476 1491
diff --git a/net/sched/sch_cbs.c b/net/sched/sch_cbs.c
index 1bef152c5721..b2905b03a432 100644
--- a/net/sched/sch_cbs.c
+++ b/net/sched/sch_cbs.c
@@ -306,7 +306,7 @@ static void cbs_set_port_rate(struct net_device *dev, struct cbs_sched_data *q)
306 if (err < 0) 306 if (err < 0)
307 goto skip; 307 goto skip;
308 308
309 if (ecmd.base.speed != SPEED_UNKNOWN) 309 if (ecmd.base.speed && ecmd.base.speed != SPEED_UNKNOWN)
310 speed = ecmd.base.speed; 310 speed = ecmd.base.speed;
311 311
312skip: 312skip:
diff --git a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c
index bad1cbe59a56..05605b30bef3 100644
--- a/net/sched/sch_dsmark.c
+++ b/net/sched/sch_dsmark.c
@@ -361,6 +361,8 @@ static int dsmark_init(struct Qdisc *sch, struct nlattr *opt,
361 goto errout; 361 goto errout;
362 362
363 err = -EINVAL; 363 err = -EINVAL;
364 if (!tb[TCA_DSMARK_INDICES])
365 goto errout;
364 indices = nla_get_u16(tb[TCA_DSMARK_INDICES]); 366 indices = nla_get_u16(tb[TCA_DSMARK_INDICES]);
365 367
366 if (hweight32(indices) != 1) 368 if (hweight32(indices) != 1)
diff --git a/net/sched/sch_taprio.c b/net/sched/sch_taprio.c
index 2f7b34205c82..68b543f85a96 100644
--- a/net/sched/sch_taprio.c
+++ b/net/sched/sch_taprio.c
@@ -1044,12 +1044,11 @@ static void taprio_set_picos_per_byte(struct net_device *dev,
1044 if (err < 0) 1044 if (err < 0)
1045 goto skip; 1045 goto skip;
1046 1046
1047 if (ecmd.base.speed != SPEED_UNKNOWN) 1047 if (ecmd.base.speed && ecmd.base.speed != SPEED_UNKNOWN)
1048 speed = ecmd.base.speed; 1048 speed = ecmd.base.speed;
1049 1049
1050skip: 1050skip:
1051 picos_per_byte = div64_s64(NSEC_PER_SEC * 1000LL * 8, 1051 picos_per_byte = (USEC_PER_SEC * 8) / speed;
1052 speed * 1000 * 1000);
1053 1052
1054 atomic64_set(&q->picos_per_byte, picos_per_byte); 1053 atomic64_set(&q->picos_per_byte, picos_per_byte);
1055 netdev_dbg(dev, "taprio: set %s's picos_per_byte to: %lld, linkspeed: %d\n", 1054 netdev_dbg(dev, "taprio: set %s's picos_per_byte to: %lld, linkspeed: %d\n",
diff --git a/net/sctp/input.c b/net/sctp/input.c
index 1008cdc44dd6..5a070fb5b278 100644
--- a/net/sctp/input.c
+++ b/net/sctp/input.c
@@ -201,7 +201,7 @@ int sctp_rcv(struct sk_buff *skb)
201 201
202 if (!xfrm_policy_check(sk, XFRM_POLICY_IN, skb, family)) 202 if (!xfrm_policy_check(sk, XFRM_POLICY_IN, skb, family))
203 goto discard_release; 203 goto discard_release;
204 nf_reset(skb); 204 nf_reset_ct(skb);
205 205
206 if (sk_filter(sk, skb)) 206 if (sk_filter(sk, skb))
207 goto discard_release; 207 goto discard_release;
diff --git a/net/tipc/link.c b/net/tipc/link.c
index 6cc75ffd9e2c..999eab592de8 100644
--- a/net/tipc/link.c
+++ b/net/tipc/link.c
@@ -160,6 +160,7 @@ struct tipc_link {
160 struct { 160 struct {
161 u16 len; 161 u16 len;
162 u16 limit; 162 u16 limit;
163 struct sk_buff *target_bskb;
163 } backlog[5]; 164 } backlog[5];
164 u16 snd_nxt; 165 u16 snd_nxt;
165 u16 window; 166 u16 window;
@@ -880,6 +881,7 @@ static void link_prepare_wakeup(struct tipc_link *l)
880void tipc_link_reset(struct tipc_link *l) 881void tipc_link_reset(struct tipc_link *l)
881{ 882{
882 struct sk_buff_head list; 883 struct sk_buff_head list;
884 u32 imp;
883 885
884 __skb_queue_head_init(&list); 886 __skb_queue_head_init(&list);
885 887
@@ -901,11 +903,10 @@ void tipc_link_reset(struct tipc_link *l)
901 __skb_queue_purge(&l->deferdq); 903 __skb_queue_purge(&l->deferdq);
902 __skb_queue_purge(&l->backlogq); 904 __skb_queue_purge(&l->backlogq);
903 __skb_queue_purge(&l->failover_deferdq); 905 __skb_queue_purge(&l->failover_deferdq);
904 l->backlog[TIPC_LOW_IMPORTANCE].len = 0; 906 for (imp = 0; imp <= TIPC_SYSTEM_IMPORTANCE; imp++) {
905 l->backlog[TIPC_MEDIUM_IMPORTANCE].len = 0; 907 l->backlog[imp].len = 0;
906 l->backlog[TIPC_HIGH_IMPORTANCE].len = 0; 908 l->backlog[imp].target_bskb = NULL;
907 l->backlog[TIPC_CRITICAL_IMPORTANCE].len = 0; 909 }
908 l->backlog[TIPC_SYSTEM_IMPORTANCE].len = 0;
909 kfree_skb(l->reasm_buf); 910 kfree_skb(l->reasm_buf);
910 kfree_skb(l->reasm_tnlmsg); 911 kfree_skb(l->reasm_tnlmsg);
911 kfree_skb(l->failover_reasm_skb); 912 kfree_skb(l->failover_reasm_skb);
@@ -947,7 +948,7 @@ int tipc_link_xmit(struct tipc_link *l, struct sk_buff_head *list,
947 u16 bc_ack = l->bc_rcvlink->rcv_nxt - 1; 948 u16 bc_ack = l->bc_rcvlink->rcv_nxt - 1;
948 struct sk_buff_head *transmq = &l->transmq; 949 struct sk_buff_head *transmq = &l->transmq;
949 struct sk_buff_head *backlogq = &l->backlogq; 950 struct sk_buff_head *backlogq = &l->backlogq;
950 struct sk_buff *skb, *_skb, *bskb; 951 struct sk_buff *skb, *_skb, **tskb;
951 int pkt_cnt = skb_queue_len(list); 952 int pkt_cnt = skb_queue_len(list);
952 int rc = 0; 953 int rc = 0;
953 954
@@ -999,19 +1000,21 @@ int tipc_link_xmit(struct tipc_link *l, struct sk_buff_head *list,
999 seqno++; 1000 seqno++;
1000 continue; 1001 continue;
1001 } 1002 }
1002 if (tipc_msg_bundle(skb_peek_tail(backlogq), hdr, mtu)) { 1003 tskb = &l->backlog[imp].target_bskb;
1004 if (tipc_msg_bundle(*tskb, hdr, mtu)) {
1003 kfree_skb(__skb_dequeue(list)); 1005 kfree_skb(__skb_dequeue(list));
1004 l->stats.sent_bundled++; 1006 l->stats.sent_bundled++;
1005 continue; 1007 continue;
1006 } 1008 }
1007 if (tipc_msg_make_bundle(&bskb, hdr, mtu, l->addr)) { 1009 if (tipc_msg_make_bundle(tskb, hdr, mtu, l->addr)) {
1008 kfree_skb(__skb_dequeue(list)); 1010 kfree_skb(__skb_dequeue(list));
1009 __skb_queue_tail(backlogq, bskb); 1011 __skb_queue_tail(backlogq, *tskb);
1010 l->backlog[msg_importance(buf_msg(bskb))].len++; 1012 l->backlog[imp].len++;
1011 l->stats.sent_bundled++; 1013 l->stats.sent_bundled++;
1012 l->stats.sent_bundles++; 1014 l->stats.sent_bundles++;
1013 continue; 1015 continue;
1014 } 1016 }
1017 l->backlog[imp].target_bskb = NULL;
1015 l->backlog[imp].len += skb_queue_len(list); 1018 l->backlog[imp].len += skb_queue_len(list);
1016 skb_queue_splice_tail_init(list, backlogq); 1019 skb_queue_splice_tail_init(list, backlogq);
1017 } 1020 }
@@ -1027,6 +1030,7 @@ static void tipc_link_advance_backlog(struct tipc_link *l,
1027 u16 seqno = l->snd_nxt; 1030 u16 seqno = l->snd_nxt;
1028 u16 ack = l->rcv_nxt - 1; 1031 u16 ack = l->rcv_nxt - 1;
1029 u16 bc_ack = l->bc_rcvlink->rcv_nxt - 1; 1032 u16 bc_ack = l->bc_rcvlink->rcv_nxt - 1;
1033 u32 imp;
1030 1034
1031 while (skb_queue_len(&l->transmq) < l->window) { 1035 while (skb_queue_len(&l->transmq) < l->window) {
1032 skb = skb_peek(&l->backlogq); 1036 skb = skb_peek(&l->backlogq);
@@ -1037,7 +1041,10 @@ static void tipc_link_advance_backlog(struct tipc_link *l,
1037 break; 1041 break;
1038 __skb_dequeue(&l->backlogq); 1042 __skb_dequeue(&l->backlogq);
1039 hdr = buf_msg(skb); 1043 hdr = buf_msg(skb);
1040 l->backlog[msg_importance(hdr)].len--; 1044 imp = msg_importance(hdr);
1045 l->backlog[imp].len--;
1046 if (unlikely(skb == l->backlog[imp].target_bskb))
1047 l->backlog[imp].target_bskb = NULL;
1041 __skb_queue_tail(&l->transmq, skb); 1048 __skb_queue_tail(&l->transmq, skb);
1042 /* next retransmit attempt */ 1049 /* next retransmit attempt */
1043 if (link_is_bc_sndlink(l)) 1050 if (link_is_bc_sndlink(l))
diff --git a/net/tipc/msg.c b/net/tipc/msg.c
index e6d49cdc61b4..922d262e153f 100644
--- a/net/tipc/msg.c
+++ b/net/tipc/msg.c
@@ -543,10 +543,7 @@ bool tipc_msg_make_bundle(struct sk_buff **skb, struct tipc_msg *msg,
543 bmsg = buf_msg(_skb); 543 bmsg = buf_msg(_skb);
544 tipc_msg_init(msg_prevnode(msg), bmsg, MSG_BUNDLER, 0, 544 tipc_msg_init(msg_prevnode(msg), bmsg, MSG_BUNDLER, 0,
545 INT_H_SIZE, dnode); 545 INT_H_SIZE, dnode);
546 if (msg_isdata(msg)) 546 msg_set_importance(bmsg, msg_importance(msg));
547 msg_set_importance(bmsg, TIPC_CRITICAL_IMPORTANCE);
548 else
549 msg_set_importance(bmsg, TIPC_SYSTEM_IMPORTANCE);
550 msg_set_seqno(bmsg, msg_seqno(msg)); 547 msg_set_seqno(bmsg, msg_seqno(msg));
551 msg_set_ack(bmsg, msg_ack(msg)); 548 msg_set_ack(bmsg, msg_ack(msg));
552 msg_set_bcast_ack(bmsg, msg_bcast_ack(msg)); 549 msg_set_bcast_ack(bmsg, msg_bcast_ack(msg));
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
index ab47bf3ab66e..2ab43b2bba31 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -638,7 +638,7 @@ struct sock *__vsock_create(struct net *net,
638} 638}
639EXPORT_SYMBOL_GPL(__vsock_create); 639EXPORT_SYMBOL_GPL(__vsock_create);
640 640
641static void __vsock_release(struct sock *sk) 641static void __vsock_release(struct sock *sk, int level)
642{ 642{
643 if (sk) { 643 if (sk) {
644 struct sk_buff *skb; 644 struct sk_buff *skb;
@@ -648,9 +648,17 @@ static void __vsock_release(struct sock *sk)
648 vsk = vsock_sk(sk); 648 vsk = vsock_sk(sk);
649 pending = NULL; /* Compiler warning. */ 649 pending = NULL; /* Compiler warning. */
650 650
651 /* The release call is supposed to use lock_sock_nested()
652 * rather than lock_sock(), if a sock lock should be acquired.
653 */
651 transport->release(vsk); 654 transport->release(vsk);
652 655
653 lock_sock(sk); 656 /* When "level" is SINGLE_DEPTH_NESTING, use the nested
657 * version to avoid the warning "possible recursive locking
658 * detected". When "level" is 0, lock_sock_nested(sk, level)
659 * is the same as lock_sock(sk).
660 */
661 lock_sock_nested(sk, level);
654 sock_orphan(sk); 662 sock_orphan(sk);
655 sk->sk_shutdown = SHUTDOWN_MASK; 663 sk->sk_shutdown = SHUTDOWN_MASK;
656 664
@@ -659,7 +667,7 @@ static void __vsock_release(struct sock *sk)
659 667
660 /* Clean up any sockets that never were accepted. */ 668 /* Clean up any sockets that never were accepted. */
661 while ((pending = vsock_dequeue_accept(sk)) != NULL) { 669 while ((pending = vsock_dequeue_accept(sk)) != NULL) {
662 __vsock_release(pending); 670 __vsock_release(pending, SINGLE_DEPTH_NESTING);
663 sock_put(pending); 671 sock_put(pending);
664 } 672 }
665 673
@@ -708,7 +716,7 @@ EXPORT_SYMBOL_GPL(vsock_stream_has_space);
708 716
709static int vsock_release(struct socket *sock) 717static int vsock_release(struct socket *sock)
710{ 718{
711 __vsock_release(sock->sk); 719 __vsock_release(sock->sk, 0);
712 sock->sk = NULL; 720 sock->sk = NULL;
713 sock->state = SS_FREE; 721 sock->state = SS_FREE;
714 722
diff --git a/net/vmw_vsock/hyperv_transport.c b/net/vmw_vsock/hyperv_transport.c
index 261521d286d6..c443db7af8d4 100644
--- a/net/vmw_vsock/hyperv_transport.c
+++ b/net/vmw_vsock/hyperv_transport.c
@@ -559,7 +559,7 @@ static void hvs_release(struct vsock_sock *vsk)
559 struct sock *sk = sk_vsock(vsk); 559 struct sock *sk = sk_vsock(vsk);
560 bool remove_sock; 560 bool remove_sock;
561 561
562 lock_sock(sk); 562 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
563 remove_sock = hvs_close_lock_held(vsk); 563 remove_sock = hvs_close_lock_held(vsk);
564 release_sock(sk); 564 release_sock(sk);
565 if (remove_sock) 565 if (remove_sock)
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index 5bb70c692b1e..a666ef8fc54e 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -820,7 +820,7 @@ void virtio_transport_release(struct vsock_sock *vsk)
820 struct sock *sk = &vsk->sk; 820 struct sock *sk = &vsk->sk;
821 bool remove_sock = true; 821 bool remove_sock = true;
822 822
823 lock_sock(sk); 823 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
824 if (sk->sk_type == SOCK_STREAM) 824 if (sk->sk_type == SOCK_STREAM)
825 remove_sock = virtio_transport_close(vsk); 825 remove_sock = virtio_transport_close(vsk);
826 826
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index d21b1581a665..141cdb171665 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -201,6 +201,38 @@ cfg80211_get_dev_from_info(struct net *netns, struct genl_info *info)
201 return __cfg80211_rdev_from_attrs(netns, info->attrs); 201 return __cfg80211_rdev_from_attrs(netns, info->attrs);
202} 202}
203 203
204static int validate_beacon_head(const struct nlattr *attr,
205 struct netlink_ext_ack *extack)
206{
207 const u8 *data = nla_data(attr);
208 unsigned int len = nla_len(attr);
209 const struct element *elem;
210 const struct ieee80211_mgmt *mgmt = (void *)data;
211 unsigned int fixedlen = offsetof(struct ieee80211_mgmt,
212 u.beacon.variable);
213
214 if (len < fixedlen)
215 goto err;
216
217 if (ieee80211_hdrlen(mgmt->frame_control) !=
218 offsetof(struct ieee80211_mgmt, u.beacon))
219 goto err;
220
221 data += fixedlen;
222 len -= fixedlen;
223
224 for_each_element(elem, data, len) {
225 /* nothing */
226 }
227
228 if (for_each_element_completed(elem, data, len))
229 return 0;
230
231err:
232 NL_SET_ERR_MSG_ATTR(extack, attr, "malformed beacon head");
233 return -EINVAL;
234}
235
204static int validate_ie_attr(const struct nlattr *attr, 236static int validate_ie_attr(const struct nlattr *attr,
205 struct netlink_ext_ack *extack) 237 struct netlink_ext_ack *extack)
206{ 238{
@@ -338,8 +370,9 @@ const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
338 370
339 [NL80211_ATTR_BEACON_INTERVAL] = { .type = NLA_U32 }, 371 [NL80211_ATTR_BEACON_INTERVAL] = { .type = NLA_U32 },
340 [NL80211_ATTR_DTIM_PERIOD] = { .type = NLA_U32 }, 372 [NL80211_ATTR_DTIM_PERIOD] = { .type = NLA_U32 },
341 [NL80211_ATTR_BEACON_HEAD] = { .type = NLA_BINARY, 373 [NL80211_ATTR_BEACON_HEAD] =
342 .len = IEEE80211_MAX_DATA_LEN }, 374 NLA_POLICY_VALIDATE_FN(NLA_BINARY, validate_beacon_head,
375 IEEE80211_MAX_DATA_LEN),
343 [NL80211_ATTR_BEACON_TAIL] = 376 [NL80211_ATTR_BEACON_TAIL] =
344 NLA_POLICY_VALIDATE_FN(NLA_BINARY, validate_ie_attr, 377 NLA_POLICY_VALIDATE_FN(NLA_BINARY, validate_ie_attr,
345 IEEE80211_MAX_DATA_LEN), 378 IEEE80211_MAX_DATA_LEN),
@@ -2636,6 +2669,8 @@ int nl80211_parse_chandef(struct cfg80211_registered_device *rdev,
2636 2669
2637 control_freq = nla_get_u32(attrs[NL80211_ATTR_WIPHY_FREQ]); 2670 control_freq = nla_get_u32(attrs[NL80211_ATTR_WIPHY_FREQ]);
2638 2671
2672 memset(chandef, 0, sizeof(*chandef));
2673
2639 chandef->chan = ieee80211_get_channel(&rdev->wiphy, control_freq); 2674 chandef->chan = ieee80211_get_channel(&rdev->wiphy, control_freq);
2640 chandef->width = NL80211_CHAN_WIDTH_20_NOHT; 2675 chandef->width = NL80211_CHAN_WIDTH_20_NOHT;
2641 chandef->center_freq1 = control_freq; 2676 chandef->center_freq1 = control_freq;
@@ -3176,7 +3211,7 @@ static int nl80211_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flag
3176 3211
3177 if (rdev->ops->get_channel) { 3212 if (rdev->ops->get_channel) {
3178 int ret; 3213 int ret;
3179 struct cfg80211_chan_def chandef; 3214 struct cfg80211_chan_def chandef = {};
3180 3215
3181 ret = rdev_get_channel(rdev, wdev, &chandef); 3216 ret = rdev_get_channel(rdev, wdev, &chandef);
3182 if (ret == 0) { 3217 if (ret == 0) {
@@ -6270,6 +6305,9 @@ static int nl80211_del_mpath(struct sk_buff *skb, struct genl_info *info)
6270 if (!rdev->ops->del_mpath) 6305 if (!rdev->ops->del_mpath)
6271 return -EOPNOTSUPP; 6306 return -EOPNOTSUPP;
6272 6307
6308 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT)
6309 return -EOPNOTSUPP;
6310
6273 return rdev_del_mpath(rdev, dev, dst); 6311 return rdev_del_mpath(rdev, dev, dst);
6274} 6312}
6275 6313
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index 5311d0ae2454..420c4207ab59 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -2108,7 +2108,7 @@ static void reg_call_notifier(struct wiphy *wiphy,
2108 2108
2109static bool reg_wdev_chan_valid(struct wiphy *wiphy, struct wireless_dev *wdev) 2109static bool reg_wdev_chan_valid(struct wiphy *wiphy, struct wireless_dev *wdev)
2110{ 2110{
2111 struct cfg80211_chan_def chandef; 2111 struct cfg80211_chan_def chandef = {};
2112 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); 2112 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
2113 enum nl80211_iftype iftype; 2113 enum nl80211_iftype iftype;
2114 2114
diff --git a/net/wireless/scan.c b/net/wireless/scan.c
index d313c9befa23..ff1016607f0b 100644
--- a/net/wireless/scan.c
+++ b/net/wireless/scan.c
@@ -1723,7 +1723,12 @@ cfg80211_update_notlisted_nontrans(struct wiphy *wiphy,
1723 return; 1723 return;
1724 new_ie_len -= trans_ssid[1]; 1724 new_ie_len -= trans_ssid[1];
1725 mbssid = cfg80211_find_ie(WLAN_EID_MULTIPLE_BSSID, ie, ielen); 1725 mbssid = cfg80211_find_ie(WLAN_EID_MULTIPLE_BSSID, ie, ielen);
1726 if (!mbssid) 1726 /*
1727 * It's not valid to have the MBSSID element before SSID
1728 * ignore if that happens - the code below assumes it is
1729 * after (while copying things inbetween).
1730 */
1731 if (!mbssid || mbssid < trans_ssid)
1727 return; 1732 return;
1728 new_ie_len -= mbssid[1]; 1733 new_ie_len -= mbssid[1];
1729 rcu_read_lock(); 1734 rcu_read_lock();
diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c
index 7b6529d81c61..cac9e28d852b 100644
--- a/net/wireless/wext-compat.c
+++ b/net/wireless/wext-compat.c
@@ -798,7 +798,7 @@ static int cfg80211_wext_giwfreq(struct net_device *dev,
798{ 798{
799 struct wireless_dev *wdev = dev->ieee80211_ptr; 799 struct wireless_dev *wdev = dev->ieee80211_ptr;
800 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); 800 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
801 struct cfg80211_chan_def chandef; 801 struct cfg80211_chan_def chandef = {};
802 int ret; 802 int ret;
803 803
804 switch (wdev->iftype) { 804 switch (wdev->iftype) {
diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c
index 6088bc2dc11e..9b599ed66d97 100644
--- a/net/xfrm/xfrm_input.c
+++ b/net/xfrm/xfrm_input.c
@@ -706,7 +706,7 @@ resume:
706 if (err) 706 if (err)
707 goto drop; 707 goto drop;
708 708
709 nf_reset(skb); 709 nf_reset_ct(skb);
710 710
711 if (decaps) { 711 if (decaps) {
712 sp = skb_sec_path(skb); 712 sp = skb_sec_path(skb);
diff --git a/net/xfrm/xfrm_interface.c b/net/xfrm/xfrm_interface.c
index 2ab4859df55a..0f5131bc3342 100644
--- a/net/xfrm/xfrm_interface.c
+++ b/net/xfrm/xfrm_interface.c
@@ -185,7 +185,7 @@ static void xfrmi_scrub_packet(struct sk_buff *skb, bool xnet)
185 skb->skb_iif = 0; 185 skb->skb_iif = 0;
186 skb->ignore_df = 0; 186 skb->ignore_df = 0;
187 skb_dst_drop(skb); 187 skb_dst_drop(skb);
188 nf_reset(skb); 188 nf_reset_ct(skb);
189 nf_reset_trace(skb); 189 nf_reset_trace(skb);
190 190
191 if (!xnet) 191 if (!xnet)
diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c
index 9499b35feb92..b1db55b50ba1 100644
--- a/net/xfrm/xfrm_output.c
+++ b/net/xfrm/xfrm_output.c
@@ -502,7 +502,7 @@ int xfrm_output_resume(struct sk_buff *skb, int err)
502 struct net *net = xs_net(skb_dst(skb)->xfrm); 502 struct net *net = xs_net(skb_dst(skb)->xfrm);
503 503
504 while (likely((err = xfrm_output_one(skb, err)) == 0)) { 504 while (likely((err = xfrm_output_one(skb, err)) == 0)) {
505 nf_reset(skb); 505 nf_reset_ct(skb);
506 506
507 err = skb_dst(skb)->ops->local_out(net, skb->sk, skb); 507 err = skb_dst(skb)->ops->local_out(net, skb->sk, skb);
508 if (unlikely(err != 1)) 508 if (unlikely(err != 1))
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
index 21e939235b39..f2d1e573ea55 100644
--- a/net/xfrm/xfrm_policy.c
+++ b/net/xfrm/xfrm_policy.c
@@ -2808,7 +2808,7 @@ static void xfrm_policy_queue_process(struct timer_list *t)
2808 continue; 2808 continue;
2809 } 2809 }
2810 2810
2811 nf_reset(skb); 2811 nf_reset_ct(skb);
2812 skb_dst_drop(skb); 2812 skb_dst_drop(skb);
2813 skb_dst_set(skb, dst); 2813 skb_dst_set(skb, dst);
2814 2814
diff --git a/tools/testing/selftests/net/.gitignore b/tools/testing/selftests/net/.gitignore
index c7cced739c34..8aefd81fbc86 100644
--- a/tools/testing/selftests/net/.gitignore
+++ b/tools/testing/selftests/net/.gitignore
@@ -21,3 +21,4 @@ ipv6_flowlabel
21ipv6_flowlabel_mgr 21ipv6_flowlabel_mgr
22so_txtime 22so_txtime
23tcp_fastopen_backup_key 23tcp_fastopen_backup_key
24nettest
diff --git a/tools/testing/selftests/net/udpgso.c b/tools/testing/selftests/net/udpgso.c
index b8265ee9923f..614b31aad168 100644
--- a/tools/testing/selftests/net/udpgso.c
+++ b/tools/testing/selftests/net/udpgso.c
@@ -89,12 +89,9 @@ struct testcase testcases_v4[] = {
89 .tfail = true, 89 .tfail = true,
90 }, 90 },
91 { 91 {
92 /* send a single MSS: will fail with GSO, because the segment 92 /* send a single MSS: will fall back to no GSO */
93 * logic in udp4_ufo_fragment demands a gso skb to be > MTU
94 */
95 .tlen = CONST_MSS_V4, 93 .tlen = CONST_MSS_V4,
96 .gso_len = CONST_MSS_V4, 94 .gso_len = CONST_MSS_V4,
97 .tfail = true,
98 .r_num_mss = 1, 95 .r_num_mss = 1,
99 }, 96 },
100 { 97 {
@@ -139,10 +136,9 @@ struct testcase testcases_v4[] = {
139 .tfail = true, 136 .tfail = true,
140 }, 137 },
141 { 138 {
142 /* send a single 1B MSS: will fail, see single MSS above */ 139 /* send a single 1B MSS: will fall back to no GSO */
143 .tlen = 1, 140 .tlen = 1,
144 .gso_len = 1, 141 .gso_len = 1,
145 .tfail = true,
146 .r_num_mss = 1, 142 .r_num_mss = 1,
147 }, 143 },
148 { 144 {
@@ -196,12 +192,9 @@ struct testcase testcases_v6[] = {
196 .tfail = true, 192 .tfail = true,
197 }, 193 },
198 { 194 {
199 /* send a single MSS: will fail with GSO, because the segment 195 /* send a single MSS: will fall back to no GSO */
200 * logic in udp4_ufo_fragment demands a gso skb to be > MTU
201 */
202 .tlen = CONST_MSS_V6, 196 .tlen = CONST_MSS_V6,
203 .gso_len = CONST_MSS_V6, 197 .gso_len = CONST_MSS_V6,
204 .tfail = true,
205 .r_num_mss = 1, 198 .r_num_mss = 1,
206 }, 199 },
207 { 200 {
@@ -246,10 +239,9 @@ struct testcase testcases_v6[] = {
246 .tfail = true, 239 .tfail = true,
247 }, 240 },
248 { 241 {
249 /* send a single 1B MSS: will fail, see single MSS above */ 242 /* send a single 1B MSS: will fall back to no GSO */
250 .tlen = 1, 243 .tlen = 1,
251 .gso_len = 1, 244 .gso_len = 1,
252 .tfail = true,
253 .r_num_mss = 1, 245 .r_num_mss = 1,
254 }, 246 },
255 { 247 {