aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/networking/segmentation-offloads.txt2
-rw-r--r--MAINTAINERS2
-rw-r--r--drivers/net/arcnet/com20020-pci.c6
-rw-r--r--drivers/net/bonding/bond_main.c15
-rw-r--r--drivers/net/ethernet/cadence/macb_main.c3
-rw-r--r--drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c2
-rw-r--r--drivers/net/ethernet/cavium/liquidio/cn66xx_device.c2
-rw-r--r--drivers/net/ethernet/hisilicon/hns/hns_enet.c22
-rw-r--r--drivers/net/ethernet/hisilicon/hns/hns_enet.h6
-rw-r--r--drivers/net/ethernet/hisilicon/hns_mdio.c2
-rw-r--r--drivers/net/ethernet/mediatek/mtk_eth_soc.c5
-rw-r--r--drivers/net/ethernet/netronome/nfp/flower/main.c1
-rw-r--r--drivers/net/virtio_net.c1
-rw-r--r--drivers/net/vrf.c11
-rw-r--r--drivers/ptp/ptp_dte.c2
-rw-r--r--include/linux/netdevice.h1
-rw-r--r--include/net/ip6_route.h8
-rw-r--r--include/net/sock.h1
-rw-r--r--net/bridge/netfilter/ebt_nflog.c1
-rw-r--r--net/core/dev.c3
-rw-r--r--net/ipv4/tcp_ipv4.c6
-rw-r--r--net/ipv6/ip6_fib.c5
-rw-r--r--net/ipv6/route.c8
-rw-r--r--net/mpls/af_mpls.c12
-rw-r--r--net/netfilter/nf_conntrack_proto_dccp.c7
-rw-r--r--net/netfilter/nf_conntrack_proto_sctp.c7
-rw-r--r--net/rds/tcp_listen.c2
-rw-r--r--net/sctp/ipv6.c2
-rw-r--r--net/tls/tls_main.c2
-rw-r--r--net/wireless/nl80211.c10
30 files changed, 92 insertions, 65 deletions
diff --git a/Documentation/networking/segmentation-offloads.txt b/Documentation/networking/segmentation-offloads.txt
index f200467ade38..2f09455a993a 100644
--- a/Documentation/networking/segmentation-offloads.txt
+++ b/Documentation/networking/segmentation-offloads.txt
@@ -55,7 +55,7 @@ IPIP, SIT, GRE, UDP Tunnel, and Remote Checksum Offloads
55In addition to the offloads described above it is possible for a frame to 55In addition to the offloads described above it is possible for a frame to
56contain additional headers such as an outer tunnel. In order to account 56contain additional headers such as an outer tunnel. In order to account
57for such instances an additional set of segmentation offload types were 57for such instances an additional set of segmentation offload types were
58introduced including SKB_GSO_IPIP, SKB_GSO_SIT, SKB_GSO_GRE, and 58introduced including SKB_GSO_IPXIP4, SKB_GSO_IPXIP6, SKB_GSO_GRE, and
59SKB_GSO_UDP_TUNNEL. These extra segmentation types are used to identify 59SKB_GSO_UDP_TUNNEL. These extra segmentation types are used to identify
60cases where there are more than just 1 set of headers. For example in the 60cases where there are more than just 1 set of headers. For example in the
61case of IPIP and SIT we should have the network and transport headers moved 61case of IPIP and SIT we should have the network and transport headers moved
diff --git a/MAINTAINERS b/MAINTAINERS
index 71d438072d57..154bf8fbf683 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -9129,9 +9129,7 @@ F: lib/random32.c
9129NETWORKING [IPv4/IPv6] 9129NETWORKING [IPv4/IPv6]
9130M: "David S. Miller" <davem@davemloft.net> 9130M: "David S. Miller" <davem@davemloft.net>
9131M: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru> 9131M: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
9132M: James Morris <jmorris@namei.org>
9133M: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org> 9132M: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
9134M: Patrick McHardy <kaber@trash.net>
9135L: netdev@vger.kernel.org 9133L: netdev@vger.kernel.org
9136T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git 9134T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
9137S: Maintained 9135S: Maintained
diff --git a/drivers/net/arcnet/com20020-pci.c b/drivers/net/arcnet/com20020-pci.c
index 2d956cb59d06..01cab9548785 100644
--- a/drivers/net/arcnet/com20020-pci.c
+++ b/drivers/net/arcnet/com20020-pci.c
@@ -225,8 +225,10 @@ static int com20020pci_probe(struct pci_dev *pdev,
225 225
226 card = devm_kzalloc(&pdev->dev, sizeof(struct com20020_dev), 226 card = devm_kzalloc(&pdev->dev, sizeof(struct com20020_dev),
227 GFP_KERNEL); 227 GFP_KERNEL);
228 if (!card) 228 if (!card) {
229 return -ENOMEM; 229 ret = -ENOMEM;
230 goto out_port;
231 }
230 232
231 card->index = i; 233 card->index = i;
232 card->pci_priv = priv; 234 card->pci_priv = priv;
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 2865f31c6076..14ff622190a5 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -1820,7 +1820,7 @@ err_undo_flags:
1820 */ 1820 */
1821static int __bond_release_one(struct net_device *bond_dev, 1821static int __bond_release_one(struct net_device *bond_dev,
1822 struct net_device *slave_dev, 1822 struct net_device *slave_dev,
1823 bool all) 1823 bool all, bool unregister)
1824{ 1824{
1825 struct bonding *bond = netdev_priv(bond_dev); 1825 struct bonding *bond = netdev_priv(bond_dev);
1826 struct slave *slave, *oldcurrent; 1826 struct slave *slave, *oldcurrent;
@@ -1965,7 +1965,10 @@ static int __bond_release_one(struct net_device *bond_dev,
1965 dev_set_mac_address(slave_dev, (struct sockaddr *)&ss); 1965 dev_set_mac_address(slave_dev, (struct sockaddr *)&ss);
1966 } 1966 }
1967 1967
1968 dev_set_mtu(slave_dev, slave->original_mtu); 1968 if (unregister)
1969 __dev_set_mtu(slave_dev, slave->original_mtu);
1970 else
1971 dev_set_mtu(slave_dev, slave->original_mtu);
1969 1972
1970 slave_dev->priv_flags &= ~IFF_BONDING; 1973 slave_dev->priv_flags &= ~IFF_BONDING;
1971 1974
@@ -1977,7 +1980,7 @@ static int __bond_release_one(struct net_device *bond_dev,
1977/* A wrapper used because of ndo_del_link */ 1980/* A wrapper used because of ndo_del_link */
1978int bond_release(struct net_device *bond_dev, struct net_device *slave_dev) 1981int bond_release(struct net_device *bond_dev, struct net_device *slave_dev)
1979{ 1982{
1980 return __bond_release_one(bond_dev, slave_dev, false); 1983 return __bond_release_one(bond_dev, slave_dev, false, false);
1981} 1984}
1982 1985
1983/* First release a slave and then destroy the bond if no more slaves are left. 1986/* First release a slave and then destroy the bond if no more slaves are left.
@@ -1989,7 +1992,7 @@ static int bond_release_and_destroy(struct net_device *bond_dev,
1989 struct bonding *bond = netdev_priv(bond_dev); 1992 struct bonding *bond = netdev_priv(bond_dev);
1990 int ret; 1993 int ret;
1991 1994
1992 ret = bond_release(bond_dev, slave_dev); 1995 ret = __bond_release_one(bond_dev, slave_dev, false, true);
1993 if (ret == 0 && !bond_has_slaves(bond)) { 1996 if (ret == 0 && !bond_has_slaves(bond)) {
1994 bond_dev->priv_flags |= IFF_DISABLE_NETPOLL; 1997 bond_dev->priv_flags |= IFF_DISABLE_NETPOLL;
1995 netdev_info(bond_dev, "Destroying bond %s\n", 1998 netdev_info(bond_dev, "Destroying bond %s\n",
@@ -3060,7 +3063,7 @@ static int bond_slave_netdev_event(unsigned long event,
3060 if (bond_dev->type != ARPHRD_ETHER) 3063 if (bond_dev->type != ARPHRD_ETHER)
3061 bond_release_and_destroy(bond_dev, slave_dev); 3064 bond_release_and_destroy(bond_dev, slave_dev);
3062 else 3065 else
3063 bond_release(bond_dev, slave_dev); 3066 __bond_release_one(bond_dev, slave_dev, false, true);
3064 break; 3067 break;
3065 case NETDEV_UP: 3068 case NETDEV_UP:
3066 case NETDEV_CHANGE: 3069 case NETDEV_CHANGE:
@@ -4252,7 +4255,7 @@ static void bond_uninit(struct net_device *bond_dev)
4252 4255
4253 /* Release the bonded slaves */ 4256 /* Release the bonded slaves */
4254 bond_for_each_slave(bond, slave, iter) 4257 bond_for_each_slave(bond, slave, iter)
4255 __bond_release_one(bond_dev, slave->dev, true); 4258 __bond_release_one(bond_dev, slave->dev, true, true);
4256 netdev_info(bond_dev, "Released all slaves\n"); 4259 netdev_info(bond_dev, "Released all slaves\n");
4257 4260
4258 arr = rtnl_dereference(bond->slave_arr); 4261 arr = rtnl_dereference(bond->slave_arr);
diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
index e69ebdd65658..26d25749c3e4 100644
--- a/drivers/net/ethernet/cadence/macb_main.c
+++ b/drivers/net/ethernet/cadence/macb_main.c
@@ -3314,10 +3314,11 @@ static const struct macb_config sama5d2_config = {
3314 3314
3315static const struct macb_config sama5d3_config = { 3315static const struct macb_config sama5d3_config = {
3316 .caps = MACB_CAPS_SG_DISABLED | MACB_CAPS_GIGABIT_MODE_AVAILABLE 3316 .caps = MACB_CAPS_SG_DISABLED | MACB_CAPS_GIGABIT_MODE_AVAILABLE
3317 | MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII, 3317 | MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII | MACB_CAPS_JUMBO,
3318 .dma_burst_length = 16, 3318 .dma_burst_length = 16,
3319 .clk_init = macb_clk_init, 3319 .clk_init = macb_clk_init,
3320 .init = macb_init, 3320 .init = macb_init,
3321 .jumbo_max_len = 10240,
3321}; 3322};
3322 3323
3323static const struct macb_config sama5d4_config = { 3324static const struct macb_config sama5d4_config = {
diff --git a/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c b/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c
index 6081c3132135..4b0ca9fb2cb4 100644
--- a/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c
+++ b/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c
@@ -221,7 +221,7 @@ static int cn23xx_pf_soft_reset(struct octeon_device *oct)
221 /* Wait for 100ms as Octeon resets. */ 221 /* Wait for 100ms as Octeon resets. */
222 mdelay(100); 222 mdelay(100);
223 223
224 if (octeon_read_csr64(oct, CN23XX_SLI_SCRATCH1) == 0x1234ULL) { 224 if (octeon_read_csr64(oct, CN23XX_SLI_SCRATCH1)) {
225 dev_err(&oct->pci_dev->dev, "OCTEON[%d]: Soft reset failed\n", 225 dev_err(&oct->pci_dev->dev, "OCTEON[%d]: Soft reset failed\n",
226 oct->octeon_id); 226 oct->octeon_id);
227 return 1; 227 return 1;
diff --git a/drivers/net/ethernet/cavium/liquidio/cn66xx_device.c b/drivers/net/ethernet/cavium/liquidio/cn66xx_device.c
index b28253c96d97..2df7440f58df 100644
--- a/drivers/net/ethernet/cavium/liquidio/cn66xx_device.c
+++ b/drivers/net/ethernet/cavium/liquidio/cn66xx_device.c
@@ -44,7 +44,7 @@ int lio_cn6xxx_soft_reset(struct octeon_device *oct)
44 /* Wait for 10ms as Octeon resets. */ 44 /* Wait for 10ms as Octeon resets. */
45 mdelay(100); 45 mdelay(100);
46 46
47 if (octeon_read_csr64(oct, CN6XXX_SLI_SCRATCH1) == 0x1234ULL) { 47 if (octeon_read_csr64(oct, CN6XXX_SLI_SCRATCH1)) {
48 dev_err(&oct->pci_dev->dev, "Soft reset failed\n"); 48 dev_err(&oct->pci_dev->dev, "Soft reset failed\n");
49 return 1; 49 return 1;
50 } 50 }
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
index c6700b91a2df..fe166e0f6781 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
@@ -300,9 +300,9 @@ static void fill_tso_desc(struct hnae_ring *ring, void *priv,
300 mtu); 300 mtu);
301} 301}
302 302
303int hns_nic_net_xmit_hw(struct net_device *ndev, 303netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev,
304 struct sk_buff *skb, 304 struct sk_buff *skb,
305 struct hns_nic_ring_data *ring_data) 305 struct hns_nic_ring_data *ring_data)
306{ 306{
307 struct hns_nic_priv *priv = netdev_priv(ndev); 307 struct hns_nic_priv *priv = netdev_priv(ndev);
308 struct hnae_ring *ring = ring_data->ring; 308 struct hnae_ring *ring = ring_data->ring;
@@ -361,6 +361,10 @@ int hns_nic_net_xmit_hw(struct net_device *ndev,
361 dev_queue = netdev_get_tx_queue(ndev, skb->queue_mapping); 361 dev_queue = netdev_get_tx_queue(ndev, skb->queue_mapping);
362 netdev_tx_sent_queue(dev_queue, skb->len); 362 netdev_tx_sent_queue(dev_queue, skb->len);
363 363
364 netif_trans_update(ndev);
365 ndev->stats.tx_bytes += skb->len;
366 ndev->stats.tx_packets++;
367
364 wmb(); /* commit all data before submit */ 368 wmb(); /* commit all data before submit */
365 assert(skb->queue_mapping < priv->ae_handle->q_num); 369 assert(skb->queue_mapping < priv->ae_handle->q_num);
366 hnae_queue_xmit(priv->ae_handle->qs[skb->queue_mapping], buf_num); 370 hnae_queue_xmit(priv->ae_handle->qs[skb->queue_mapping], buf_num);
@@ -1469,17 +1473,11 @@ static netdev_tx_t hns_nic_net_xmit(struct sk_buff *skb,
1469 struct net_device *ndev) 1473 struct net_device *ndev)
1470{ 1474{
1471 struct hns_nic_priv *priv = netdev_priv(ndev); 1475 struct hns_nic_priv *priv = netdev_priv(ndev);
1472 int ret;
1473 1476
1474 assert(skb->queue_mapping < ndev->ae_handle->q_num); 1477 assert(skb->queue_mapping < ndev->ae_handle->q_num);
1475 ret = hns_nic_net_xmit_hw(ndev, skb, 1478
1476 &tx_ring_data(priv, skb->queue_mapping)); 1479 return hns_nic_net_xmit_hw(ndev, skb,
1477 if (ret == NETDEV_TX_OK) { 1480 &tx_ring_data(priv, skb->queue_mapping));
1478 netif_trans_update(ndev);
1479 ndev->stats.tx_bytes += skb->len;
1480 ndev->stats.tx_packets++;
1481 }
1482 return (netdev_tx_t)ret;
1483} 1481}
1484 1482
1485static void hns_nic_drop_rx_fetch(struct hns_nic_ring_data *ring_data, 1483static void hns_nic_drop_rx_fetch(struct hns_nic_ring_data *ring_data,
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.h b/drivers/net/ethernet/hisilicon/hns/hns_enet.h
index 1b83232082b2..9cb4c7884201 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.h
+++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.h
@@ -92,8 +92,8 @@ void hns_ethtool_set_ops(struct net_device *ndev);
92void hns_nic_net_reset(struct net_device *ndev); 92void hns_nic_net_reset(struct net_device *ndev);
93void hns_nic_net_reinit(struct net_device *netdev); 93void hns_nic_net_reinit(struct net_device *netdev);
94int hns_nic_init_phy(struct net_device *ndev, struct hnae_handle *h); 94int hns_nic_init_phy(struct net_device *ndev, struct hnae_handle *h);
95int hns_nic_net_xmit_hw(struct net_device *ndev, 95netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev,
96 struct sk_buff *skb, 96 struct sk_buff *skb,
97 struct hns_nic_ring_data *ring_data); 97 struct hns_nic_ring_data *ring_data);
98 98
99#endif /**__HNS_ENET_H */ 99#endif /**__HNS_ENET_H */
diff --git a/drivers/net/ethernet/hisilicon/hns_mdio.c b/drivers/net/ethernet/hisilicon/hns_mdio.c
index e5221d95afe1..017e08452d8c 100644
--- a/drivers/net/ethernet/hisilicon/hns_mdio.c
+++ b/drivers/net/ethernet/hisilicon/hns_mdio.c
@@ -261,7 +261,7 @@ static int hns_mdio_write(struct mii_bus *bus,
261 261
262 /* config the data needed writing */ 262 /* config the data needed writing */
263 cmd_reg_cfg = devad; 263 cmd_reg_cfg = devad;
264 op = MDIO_C45_WRITE_ADDR; 264 op = MDIO_C45_WRITE_DATA;
265 } 265 }
266 266
267 MDIO_SET_REG_FIELD(mdio_dev, MDIO_WDATA_REG, MDIO_WDATA_DATA_M, 267 MDIO_SET_REG_FIELD(mdio_dev, MDIO_WDATA_REG, MDIO_WDATA_DATA_M,
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 41a5c5d2ac89..b3d0c2e6347a 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -2401,15 +2401,10 @@ static int mtk_probe(struct platform_device *pdev)
2401{ 2401{
2402 struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 2402 struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2403 struct device_node *mac_np; 2403 struct device_node *mac_np;
2404 const struct of_device_id *match;
2405 struct mtk_soc_data *soc;
2406 struct mtk_eth *eth; 2404 struct mtk_eth *eth;
2407 int err; 2405 int err;
2408 int i; 2406 int i;
2409 2407
2410 match = of_match_device(of_mtk_match, &pdev->dev);
2411 soc = (struct mtk_soc_data *)match->data;
2412
2413 eth = devm_kzalloc(&pdev->dev, sizeof(*eth), GFP_KERNEL); 2408 eth = devm_kzalloc(&pdev->dev, sizeof(*eth), GFP_KERNEL);
2414 if (!eth) 2409 if (!eth)
2415 return -ENOMEM; 2410 return -ENOMEM;
diff --git a/drivers/net/ethernet/netronome/nfp/flower/main.c b/drivers/net/ethernet/netronome/nfp/flower/main.c
index fc10f27e0a0c..6a65c8b33807 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/main.c
+++ b/drivers/net/ethernet/netronome/nfp/flower/main.c
@@ -356,6 +356,7 @@ err_free_app_priv:
356 356
357static void nfp_flower_clean(struct nfp_app *app) 357static void nfp_flower_clean(struct nfp_app *app)
358{ 358{
359 nfp_flower_metadata_cleanup(app);
359 vfree(app->priv); 360 vfree(app->priv);
360 app->priv = NULL; 361 app->priv = NULL;
361} 362}
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 2e69bcdc5b07..99a26a9efec1 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -2229,6 +2229,7 @@ static int virtnet_find_vqs(struct virtnet_info *vi)
2229 kfree(names); 2229 kfree(names);
2230 kfree(callbacks); 2230 kfree(callbacks);
2231 kfree(vqs); 2231 kfree(vqs);
2232 kfree(ctx);
2232 2233
2233 return 0; 2234 return 0;
2234 2235
diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
index f4d0054981c6..8a1eaf3c302a 100644
--- a/drivers/net/vrf.c
+++ b/drivers/net/vrf.c
@@ -922,15 +922,10 @@ static int vrf_del_slave(struct net_device *dev, struct net_device *port_dev)
922static void vrf_dev_uninit(struct net_device *dev) 922static void vrf_dev_uninit(struct net_device *dev)
923{ 923{
924 struct net_vrf *vrf = netdev_priv(dev); 924 struct net_vrf *vrf = netdev_priv(dev);
925 struct net_device *port_dev;
926 struct list_head *iter;
927 925
928 vrf_rtable_release(dev, vrf); 926 vrf_rtable_release(dev, vrf);
929 vrf_rt6_release(dev, vrf); 927 vrf_rt6_release(dev, vrf);
930 928
931 netdev_for_each_lower_dev(dev, port_dev, iter)
932 vrf_del_slave(dev, port_dev);
933
934 free_percpu(dev->dstats); 929 free_percpu(dev->dstats);
935 dev->dstats = NULL; 930 dev->dstats = NULL;
936} 931}
@@ -1386,6 +1381,12 @@ static int vrf_validate(struct nlattr *tb[], struct nlattr *data[],
1386 1381
1387static void vrf_dellink(struct net_device *dev, struct list_head *head) 1382static void vrf_dellink(struct net_device *dev, struct list_head *head)
1388{ 1383{
1384 struct net_device *port_dev;
1385 struct list_head *iter;
1386
1387 netdev_for_each_lower_dev(dev, port_dev, iter)
1388 vrf_del_slave(dev, port_dev);
1389
1389 unregister_netdevice_queue(dev, head); 1390 unregister_netdevice_queue(dev, head);
1390} 1391}
1391 1392
diff --git a/drivers/ptp/ptp_dte.c b/drivers/ptp/ptp_dte.c
index 00145a3f1e70..faf6f7a83713 100644
--- a/drivers/ptp/ptp_dte.c
+++ b/drivers/ptp/ptp_dte.c
@@ -40,7 +40,7 @@
40#define DTE_WRAP_AROUND_NSEC_SHIFT 44 40#define DTE_WRAP_AROUND_NSEC_SHIFT 44
41 41
42/* 44 bits NCO */ 42/* 44 bits NCO */
43#define DTE_NCO_MAX_NS 0xFFFFFFFFFFF 43#define DTE_NCO_MAX_NS 0xFFFFFFFFFFFLL
44 44
45/* 125MHz with 3.29 reg cfg */ 45/* 125MHz with 3.29 reg cfg */
46#define DTE_PPB_ADJ(ppb) (u32)(div64_u64((((u64)abs(ppb) * BIT(28)) +\ 46#define DTE_PPB_ADJ(ppb) (u32)(div64_u64((((u64)abs(ppb) * BIT(28)) +\
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index e48ee2eaaa3e..779b23595596 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -3284,6 +3284,7 @@ void __dev_notify_flags(struct net_device *, unsigned int old_flags,
3284int dev_change_name(struct net_device *, const char *); 3284int dev_change_name(struct net_device *, const char *);
3285int dev_set_alias(struct net_device *, const char *, size_t); 3285int dev_set_alias(struct net_device *, const char *, size_t);
3286int dev_change_net_namespace(struct net_device *, struct net *, const char *); 3286int dev_change_net_namespace(struct net_device *, struct net *, const char *);
3287int __dev_set_mtu(struct net_device *, int);
3287int dev_set_mtu(struct net_device *, int); 3288int dev_set_mtu(struct net_device *, int);
3288void dev_set_group(struct net_device *, int); 3289void dev_set_group(struct net_device *, int);
3289int dev_set_mac_address(struct net_device *, struct sockaddr *); 3290int dev_set_mac_address(struct net_device *, struct sockaddr *);
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h
index 0fbf73dd531a..199056933dcb 100644
--- a/include/net/ip6_route.h
+++ b/include/net/ip6_route.h
@@ -22,6 +22,7 @@ struct route_info {
22#include <net/flow.h> 22#include <net/flow.h>
23#include <net/ip6_fib.h> 23#include <net/ip6_fib.h>
24#include <net/sock.h> 24#include <net/sock.h>
25#include <net/lwtunnel.h>
25#include <linux/ip.h> 26#include <linux/ip.h>
26#include <linux/ipv6.h> 27#include <linux/ipv6.h>
27#include <linux/route.h> 28#include <linux/route.h>
@@ -232,4 +233,11 @@ static inline struct in6_addr *rt6_nexthop(struct rt6_info *rt,
232 return daddr; 233 return daddr;
233} 234}
234 235
236static inline bool rt6_duplicate_nexthop(struct rt6_info *a, struct rt6_info *b)
237{
238 return a->dst.dev == b->dst.dev &&
239 a->rt6i_idev == b->rt6i_idev &&
240 ipv6_addr_equal(&a->rt6i_gateway, &b->rt6i_gateway) &&
241 !lwtunnel_cmp_encap(a->dst.lwtstate, b->dst.lwtstate);
242}
235#endif 243#endif
diff --git a/include/net/sock.h b/include/net/sock.h
index 48e4d5c38f85..8c85791fc196 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -1697,6 +1697,7 @@ static inline void sock_orphan(struct sock *sk)
1697 1697
1698static inline void sock_graft(struct sock *sk, struct socket *parent) 1698static inline void sock_graft(struct sock *sk, struct socket *parent)
1699{ 1699{
1700 WARN_ON(parent->sk);
1700 write_lock_bh(&sk->sk_callback_lock); 1701 write_lock_bh(&sk->sk_callback_lock);
1701 sk->sk_wq = parent->wq; 1702 sk->sk_wq = parent->wq;
1702 parent->sk = sk; 1703 parent->sk = sk;
diff --git a/net/bridge/netfilter/ebt_nflog.c b/net/bridge/netfilter/ebt_nflog.c
index c1dc48686200..da1c2fdc08c8 100644
--- a/net/bridge/netfilter/ebt_nflog.c
+++ b/net/bridge/netfilter/ebt_nflog.c
@@ -30,6 +30,7 @@ ebt_nflog_tg(struct sk_buff *skb, const struct xt_action_param *par)
30 li.u.ulog.copy_len = info->len; 30 li.u.ulog.copy_len = info->len;
31 li.u.ulog.group = info->group; 31 li.u.ulog.group = info->group;
32 li.u.ulog.qthreshold = info->threshold; 32 li.u.ulog.qthreshold = info->threshold;
33 li.u.ulog.flags = 0;
33 34
34 nf_log_packet(net, PF_BRIDGE, xt_hooknum(par), skb, xt_in(par), 35 nf_log_packet(net, PF_BRIDGE, xt_hooknum(par), skb, xt_in(par),
35 xt_out(par), &li, "%s", info->prefix); 36 xt_out(par), &li, "%s", info->prefix);
diff --git a/net/core/dev.c b/net/core/dev.c
index 7098fba52be1..02440518dd69 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -6765,7 +6765,7 @@ int dev_change_flags(struct net_device *dev, unsigned int flags)
6765} 6765}
6766EXPORT_SYMBOL(dev_change_flags); 6766EXPORT_SYMBOL(dev_change_flags);
6767 6767
6768static int __dev_set_mtu(struct net_device *dev, int new_mtu) 6768int __dev_set_mtu(struct net_device *dev, int new_mtu)
6769{ 6769{
6770 const struct net_device_ops *ops = dev->netdev_ops; 6770 const struct net_device_ops *ops = dev->netdev_ops;
6771 6771
@@ -6775,6 +6775,7 @@ static int __dev_set_mtu(struct net_device *dev, int new_mtu)
6775 dev->mtu = new_mtu; 6775 dev->mtu = new_mtu;
6776 return 0; 6776 return 0;
6777} 6777}
6778EXPORT_SYMBOL(__dev_set_mtu);
6778 6779
6779/** 6780/**
6780 * dev_set_mtu - Change maximum transfer unit 6781 * dev_set_mtu - Change maximum transfer unit
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 6ec6900eb300..a20e7f03d5f7 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -943,9 +943,9 @@ struct tcp_md5sig_key *tcp_md5_do_lookup(const struct sock *sk,
943} 943}
944EXPORT_SYMBOL(tcp_md5_do_lookup); 944EXPORT_SYMBOL(tcp_md5_do_lookup);
945 945
946struct tcp_md5sig_key *tcp_md5_do_lookup_exact(const struct sock *sk, 946static struct tcp_md5sig_key *tcp_md5_do_lookup_exact(const struct sock *sk,
947 const union tcp_md5_addr *addr, 947 const union tcp_md5_addr *addr,
948 int family, u8 prefixlen) 948 int family, u8 prefixlen)
949{ 949{
950 const struct tcp_sock *tp = tcp_sk(sk); 950 const struct tcp_sock *tp = tcp_sk(sk);
951 struct tcp_md5sig_key *key; 951 struct tcp_md5sig_key *key;
diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
index 5477ba729c36..ebb299cf72b7 100644
--- a/net/ipv6/ip6_fib.c
+++ b/net/ipv6/ip6_fib.c
@@ -786,10 +786,7 @@ static int fib6_add_rt2node(struct fib6_node *fn, struct rt6_info *rt,
786 goto next_iter; 786 goto next_iter;
787 } 787 }
788 788
789 if (iter->dst.dev == rt->dst.dev && 789 if (rt6_duplicate_nexthop(iter, rt)) {
790 iter->rt6i_idev == rt->rt6i_idev &&
791 ipv6_addr_equal(&iter->rt6i_gateway,
792 &rt->rt6i_gateway)) {
793 if (rt->rt6i_nsiblings) 790 if (rt->rt6i_nsiblings)
794 rt->rt6i_nsiblings = 0; 791 rt->rt6i_nsiblings = 0;
795 if (!(iter->rt6i_flags & RTF_EXPIRES)) 792 if (!(iter->rt6i_flags & RTF_EXPIRES))
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 0488a24c2a44..4d30c96a819d 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -3036,17 +3036,11 @@ static int ip6_route_info_append(struct list_head *rt6_nh_list,
3036 struct rt6_info *rt, struct fib6_config *r_cfg) 3036 struct rt6_info *rt, struct fib6_config *r_cfg)
3037{ 3037{
3038 struct rt6_nh *nh; 3038 struct rt6_nh *nh;
3039 struct rt6_info *rtnh;
3040 int err = -EEXIST; 3039 int err = -EEXIST;
3041 3040
3042 list_for_each_entry(nh, rt6_nh_list, next) { 3041 list_for_each_entry(nh, rt6_nh_list, next) {
3043 /* check if rt6_info already exists */ 3042 /* check if rt6_info already exists */
3044 rtnh = nh->rt6_info; 3043 if (rt6_duplicate_nexthop(nh->rt6_info, rt))
3045
3046 if (rtnh->dst.dev == rt->dst.dev &&
3047 rtnh->rt6i_idev == rt->rt6i_idev &&
3048 ipv6_addr_equal(&rtnh->rt6i_gateway,
3049 &rt->rt6i_gateway))
3050 return err; 3044 return err;
3051 } 3045 }
3052 3046
diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
index bdcfb2d04cd2..ea4f481839dd 100644
--- a/net/mpls/af_mpls.c
+++ b/net/mpls/af_mpls.c
@@ -2076,6 +2076,7 @@ static int mpls_getroute(struct sk_buff *in_skb, struct nlmsghdr *in_nlh,
2076{ 2076{
2077 struct net *net = sock_net(in_skb->sk); 2077 struct net *net = sock_net(in_skb->sk);
2078 u32 portid = NETLINK_CB(in_skb).portid; 2078 u32 portid = NETLINK_CB(in_skb).portid;
2079 u32 in_label = LABEL_NOT_SPECIFIED;
2079 struct nlattr *tb[RTA_MAX + 1]; 2080 struct nlattr *tb[RTA_MAX + 1];
2080 u32 labels[MAX_NEW_LABELS]; 2081 u32 labels[MAX_NEW_LABELS];
2081 struct mpls_shim_hdr *hdr; 2082 struct mpls_shim_hdr *hdr;
@@ -2086,9 +2087,8 @@ static int mpls_getroute(struct sk_buff *in_skb, struct nlmsghdr *in_nlh,
2086 struct nlmsghdr *nlh; 2087 struct nlmsghdr *nlh;
2087 struct sk_buff *skb; 2088 struct sk_buff *skb;
2088 struct mpls_nh *nh; 2089 struct mpls_nh *nh;
2089 int err = -EINVAL;
2090 u32 in_label;
2091 u8 n_labels; 2090 u8 n_labels;
2091 int err;
2092 2092
2093 err = nlmsg_parse(in_nlh, sizeof(*rtm), tb, RTA_MAX, 2093 err = nlmsg_parse(in_nlh, sizeof(*rtm), tb, RTA_MAX,
2094 rtm_mpls_policy, extack); 2094 rtm_mpls_policy, extack);
@@ -2101,11 +2101,15 @@ static int mpls_getroute(struct sk_buff *in_skb, struct nlmsghdr *in_nlh,
2101 u8 label_count; 2101 u8 label_count;
2102 2102
2103 if (nla_get_labels(tb[RTA_DST], 1, &label_count, 2103 if (nla_get_labels(tb[RTA_DST], 1, &label_count,
2104 &in_label, extack)) 2104 &in_label, extack)) {
2105 err = -EINVAL;
2105 goto errout; 2106 goto errout;
2107 }
2106 2108
2107 if (in_label < MPLS_LABEL_FIRST_UNRESERVED) 2109 if (!mpls_label_ok(net, in_label, extack)) {
2110 err = -EINVAL;
2108 goto errout; 2111 goto errout;
2112 }
2109 } 2113 }
2110 2114
2111 rt = mpls_route_input_rcu(net, in_label); 2115 rt = mpls_route_input_rcu(net, in_label);
diff --git a/net/netfilter/nf_conntrack_proto_dccp.c b/net/netfilter/nf_conntrack_proto_dccp.c
index b553fdd68816..4707d997558a 100644
--- a/net/netfilter/nf_conntrack_proto_dccp.c
+++ b/net/netfilter/nf_conntrack_proto_dccp.c
@@ -872,6 +872,11 @@ static int dccp_init_net(struct net *net, u_int16_t proto)
872 return dccp_kmemdup_sysctl_table(net, pn, dn); 872 return dccp_kmemdup_sysctl_table(net, pn, dn);
873} 873}
874 874
875static struct nf_proto_net *dccp_get_net_proto(struct net *net)
876{
877 return &net->ct.nf_ct_proto.dccp.pn;
878}
879
875struct nf_conntrack_l4proto nf_conntrack_l4proto_dccp4 __read_mostly = { 880struct nf_conntrack_l4proto nf_conntrack_l4proto_dccp4 __read_mostly = {
876 .l3proto = AF_INET, 881 .l3proto = AF_INET,
877 .l4proto = IPPROTO_DCCP, 882 .l4proto = IPPROTO_DCCP,
@@ -904,6 +909,7 @@ struct nf_conntrack_l4proto nf_conntrack_l4proto_dccp4 __read_mostly = {
904 }, 909 },
905#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */ 910#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
906 .init_net = dccp_init_net, 911 .init_net = dccp_init_net,
912 .get_net_proto = dccp_get_net_proto,
907}; 913};
908EXPORT_SYMBOL_GPL(nf_conntrack_l4proto_dccp4); 914EXPORT_SYMBOL_GPL(nf_conntrack_l4proto_dccp4);
909 915
@@ -939,5 +945,6 @@ struct nf_conntrack_l4proto nf_conntrack_l4proto_dccp6 __read_mostly = {
939 }, 945 },
940#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */ 946#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
941 .init_net = dccp_init_net, 947 .init_net = dccp_init_net,
948 .get_net_proto = dccp_get_net_proto,
942}; 949};
943EXPORT_SYMBOL_GPL(nf_conntrack_l4proto_dccp6); 950EXPORT_SYMBOL_GPL(nf_conntrack_l4proto_dccp6);
diff --git a/net/netfilter/nf_conntrack_proto_sctp.c b/net/netfilter/nf_conntrack_proto_sctp.c
index 31c6c8ee9d5d..6eef29d2eec4 100644
--- a/net/netfilter/nf_conntrack_proto_sctp.c
+++ b/net/netfilter/nf_conntrack_proto_sctp.c
@@ -783,6 +783,11 @@ static int sctp_init_net(struct net *net, u_int16_t proto)
783 return sctp_kmemdup_sysctl_table(pn, sn); 783 return sctp_kmemdup_sysctl_table(pn, sn);
784} 784}
785 785
786static struct nf_proto_net *sctp_get_net_proto(struct net *net)
787{
788 return &net->ct.nf_ct_proto.sctp.pn;
789}
790
786struct nf_conntrack_l4proto nf_conntrack_l4proto_sctp4 __read_mostly = { 791struct nf_conntrack_l4proto nf_conntrack_l4proto_sctp4 __read_mostly = {
787 .l3proto = PF_INET, 792 .l3proto = PF_INET,
788 .l4proto = IPPROTO_SCTP, 793 .l4proto = IPPROTO_SCTP,
@@ -816,6 +821,7 @@ struct nf_conntrack_l4proto nf_conntrack_l4proto_sctp4 __read_mostly = {
816 }, 821 },
817#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */ 822#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
818 .init_net = sctp_init_net, 823 .init_net = sctp_init_net,
824 .get_net_proto = sctp_get_net_proto,
819}; 825};
820EXPORT_SYMBOL_GPL(nf_conntrack_l4proto_sctp4); 826EXPORT_SYMBOL_GPL(nf_conntrack_l4proto_sctp4);
821 827
@@ -852,5 +858,6 @@ struct nf_conntrack_l4proto nf_conntrack_l4proto_sctp6 __read_mostly = {
852#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */ 858#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
853#endif 859#endif
854 .init_net = sctp_init_net, 860 .init_net = sctp_init_net,
861 .get_net_proto = sctp_get_net_proto,
855}; 862};
856EXPORT_SYMBOL_GPL(nf_conntrack_l4proto_sctp6); 863EXPORT_SYMBOL_GPL(nf_conntrack_l4proto_sctp6);
diff --git a/net/rds/tcp_listen.c b/net/rds/tcp_listen.c
index c6dc8caaf5ca..c061d6eb465d 100644
--- a/net/rds/tcp_listen.c
+++ b/net/rds/tcp_listen.c
@@ -136,7 +136,7 @@ int rds_tcp_accept_one(struct socket *sock)
136 if (!sock) /* module unload or netns delete in progress */ 136 if (!sock) /* module unload or netns delete in progress */
137 return -ENETUNREACH; 137 return -ENETUNREACH;
138 138
139 ret = sock_create_kern(sock_net(sock->sk), sock->sk->sk_family, 139 ret = sock_create_lite(sock->sk->sk_family,
140 sock->sk->sk_type, sock->sk->sk_protocol, 140 sock->sk->sk_type, sock->sk->sk_protocol,
141 &new_sock); 141 &new_sock);
142 if (ret) 142 if (ret)
diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c
index f5b45b8b8b16..2a186b201ad2 100644
--- a/net/sctp/ipv6.c
+++ b/net/sctp/ipv6.c
@@ -252,6 +252,8 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr,
252 fl6->flowi6_proto = IPPROTO_SCTP; 252 fl6->flowi6_proto = IPPROTO_SCTP;
253 if (ipv6_addr_type(&daddr->v6.sin6_addr) & IPV6_ADDR_LINKLOCAL) 253 if (ipv6_addr_type(&daddr->v6.sin6_addr) & IPV6_ADDR_LINKLOCAL)
254 fl6->flowi6_oif = daddr->v6.sin6_scope_id; 254 fl6->flowi6_oif = daddr->v6.sin6_scope_id;
255 else if (asoc)
256 fl6->flowi6_oif = asoc->base.sk->sk_bound_dev_if;
255 257
256 pr_debug("%s: dst=%pI6 ", __func__, &fl6->daddr); 258 pr_debug("%s: dst=%pI6 ", __func__, &fl6->daddr);
257 259
diff --git a/net/tls/tls_main.c b/net/tls/tls_main.c
index a03130a47b85..60aff60e30ad 100644
--- a/net/tls/tls_main.c
+++ b/net/tls/tls_main.c
@@ -272,7 +272,7 @@ static int do_tls_getsockopt_tx(struct sock *sk, char __user *optval,
272 goto out; 272 goto out;
273 } 273 }
274 274
275 if (len == sizeof(crypto_info)) { 275 if (len == sizeof(*crypto_info)) {
276 if (copy_to_user(optval, crypto_info, sizeof(*crypto_info))) 276 if (copy_to_user(optval, crypto_info, sizeof(*crypto_info)))
277 rc = -EFAULT; 277 rc = -EFAULT;
278 goto out; 278 goto out;
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 45ba3d0872cc..8ce85420ecb0 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -291,8 +291,7 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
291 [NL80211_ATTR_WPA_VERSIONS] = { .type = NLA_U32 }, 291 [NL80211_ATTR_WPA_VERSIONS] = { .type = NLA_U32 },
292 [NL80211_ATTR_PID] = { .type = NLA_U32 }, 292 [NL80211_ATTR_PID] = { .type = NLA_U32 },
293 [NL80211_ATTR_4ADDR] = { .type = NLA_U8 }, 293 [NL80211_ATTR_4ADDR] = { .type = NLA_U8 },
294 [NL80211_ATTR_PMKID] = { .type = NLA_BINARY, 294 [NL80211_ATTR_PMKID] = { .len = WLAN_PMKID_LEN },
295 .len = WLAN_PMKID_LEN },
296 [NL80211_ATTR_DURATION] = { .type = NLA_U32 }, 295 [NL80211_ATTR_DURATION] = { .type = NLA_U32 },
297 [NL80211_ATTR_COOKIE] = { .type = NLA_U64 }, 296 [NL80211_ATTR_COOKIE] = { .type = NLA_U64 },
298 [NL80211_ATTR_TX_RATES] = { .type = NLA_NESTED }, 297 [NL80211_ATTR_TX_RATES] = { .type = NLA_NESTED },
@@ -348,6 +347,7 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
348 [NL80211_ATTR_SCAN_FLAGS] = { .type = NLA_U32 }, 347 [NL80211_ATTR_SCAN_FLAGS] = { .type = NLA_U32 },
349 [NL80211_ATTR_P2P_CTWINDOW] = { .type = NLA_U8 }, 348 [NL80211_ATTR_P2P_CTWINDOW] = { .type = NLA_U8 },
350 [NL80211_ATTR_P2P_OPPPS] = { .type = NLA_U8 }, 349 [NL80211_ATTR_P2P_OPPPS] = { .type = NLA_U8 },
350 [NL80211_ATTR_LOCAL_MESH_POWER_MODE] = {. type = NLA_U32 },
351 [NL80211_ATTR_ACL_POLICY] = {. type = NLA_U32 }, 351 [NL80211_ATTR_ACL_POLICY] = {. type = NLA_U32 },
352 [NL80211_ATTR_MAC_ADDRS] = { .type = NLA_NESTED }, 352 [NL80211_ATTR_MAC_ADDRS] = { .type = NLA_NESTED },
353 [NL80211_ATTR_STA_CAPABILITY] = { .type = NLA_U16 }, 353 [NL80211_ATTR_STA_CAPABILITY] = { .type = NLA_U16 },
@@ -520,7 +520,7 @@ nl80211_bss_select_policy[NL80211_BSS_SELECT_ATTR_MAX + 1] = {
520static const struct nla_policy 520static const struct nla_policy
521nl80211_nan_func_policy[NL80211_NAN_FUNC_ATTR_MAX + 1] = { 521nl80211_nan_func_policy[NL80211_NAN_FUNC_ATTR_MAX + 1] = {
522 [NL80211_NAN_FUNC_TYPE] = { .type = NLA_U8 }, 522 [NL80211_NAN_FUNC_TYPE] = { .type = NLA_U8 },
523 [NL80211_NAN_FUNC_SERVICE_ID] = { .type = NLA_BINARY, 523 [NL80211_NAN_FUNC_SERVICE_ID] = {
524 .len = NL80211_NAN_FUNC_SERVICE_ID_LEN }, 524 .len = NL80211_NAN_FUNC_SERVICE_ID_LEN },
525 [NL80211_NAN_FUNC_PUBLISH_TYPE] = { .type = NLA_U8 }, 525 [NL80211_NAN_FUNC_PUBLISH_TYPE] = { .type = NLA_U8 },
526 [NL80211_NAN_FUNC_PUBLISH_BCAST] = { .type = NLA_FLAG }, 526 [NL80211_NAN_FUNC_PUBLISH_BCAST] = { .type = NLA_FLAG },
@@ -6469,6 +6469,10 @@ static int validate_scan_freqs(struct nlattr *freqs)
6469 struct nlattr *attr1, *attr2; 6469 struct nlattr *attr1, *attr2;
6470 int n_channels = 0, tmp1, tmp2; 6470 int n_channels = 0, tmp1, tmp2;
6471 6471
6472 nla_for_each_nested(attr1, freqs, tmp1)
6473 if (nla_len(attr1) != sizeof(u32))
6474 return 0;
6475
6472 nla_for_each_nested(attr1, freqs, tmp1) { 6476 nla_for_each_nested(attr1, freqs, tmp1) {
6473 n_channels++; 6477 n_channels++;
6474 /* 6478 /*