aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-07-08 15:01:22 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-07-08 15:01:22 -0400
commit8b6b3172ce02aef147f74b32ea11796c580f795c (patch)
tree2733742fc8cda742ad851e32155999915e85bf45 /drivers
parentb8d4c1f9f48e344fe1d6e6ffae01d4b31bf0aac0 (diff)
parente8df760307830ca26cf380a9a4b36468a0352fa5 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: "Mostly fixing some light fallout from the changes that went into the merge window. 1) Fix memory leaks on network namespace teardown in netfilter, from Liping Zhang. 2) When comparing ipv6 nexthops, we have to take the lightweight tunnel state into account as well. From David Ahern. 3) Fix socket option object length check in the new TLS code, from Matthias Rosenfelder. 4) Fix memory leak in nfp driver flower support, from Jakub Kicinski. 5) Several netlink attribute validation fixes in cfg80211, from Srinivas Dasari. 6) Fix context array leak in virtio_net, from Jason Wang. 7) SKB use after free in hns driver, from Yusheng Lin. 8) Fix socket leak on accept() in RDS, from Sowmini Varadhan. Also add a WARN_ON() to sock_graft() so other protocol stacks don't trip over this as well" * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (26 commits) net: ethernet: mediatek: remove useless code in mtk_probe() mpls: fix uninitialized in_label var warning in mpls_getroute doc: SKB_GSO_[IPIP|SIT] have been replaced bonding: avoid NETDEV_CHANGEMTU event when unregistering slave net/sock: add WARN_ON(parent->sk) in sock_graft() rds: tcp: use sock_create_lite() to create the accept socket net: hns: Fix a skb used after free bug net: hns: Fix a wrong op phy C45 code net: macb: Adding Support for Jumbo Frames up to 10240 Bytes in SAMA5D3 net: Update networking MAINTAINERS entry. virtio-net: fix leaking of ctx array cfg80211: Validate frequencies nested in NL80211_ATTR_SCAN_FREQUENCIES cfg80211: Define nla_policy for NL80211_ATTR_LOCAL_MESH_POWER_MODE cfg80211: Check if NAN service ID is of expected size cfg80211: Check if PMKID attribute is of expected size arcnet: com20020-pci: Fix an error handling path in 'com20020pci_probe()' nfp: flower: add missing clean up call to avoid memory leaks vrf: fix bug_on triggered by rx when destroying a vrf ptp: dte: Use LL suffix for 64-bit constants sctp: set the value of flowi6_oif to sk_bound_dev_if to make sctp_v6_get_dst to find the correct route entry. ...
Diffstat (limited to 'drivers')
-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
13 files changed, 40 insertions, 38 deletions
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)) +\