Skip to content

Commit 74c78b4

Browse files
committed
Merge tag 'net-5.16-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Jakub Kicinski: "Including fixes from.. Santa? No regressions on our radar at this point. The igc problem fixed here was the last one I was tracking but it was broken in previous releases, anyway. Mostly driver fixes and a couple of largish SMC fixes. Current release - regressions: - xsk: initialise xskb free_list_node, fixup for a -rc7 fix Current release - new code bugs: - mlx5: handful of minor fixes: - use first online CPU instead of hard coded CPU - fix some error handling paths in 'mlx5e_tc_add_fdb_flow()' - fix skb memory leak when TC classifier action offloads are disabled - fix memory leak with rules with internal OvS port Previous releases - regressions: - igc: do not enable crosstimestamping for i225-V models Previous releases - always broken: - udp: use datalen to cap ipv6 udp max gso segments - fix use-after-free in tw_timer_handler due to early free of stats - smc: fix kernel panic caused by race of smc_sock - smc: don't send CDC/LLC message if link not ready, avoid timeouts - sctp: use call_rcu to free endpoint, avoid UAF in sock diag - bridge: mcast: add and enforce query interval minimum - usb: pegasus: do not drop long Ethernet frames - mlx5e: fix ICOSQ recovery flow for XSK - nfc: uapi: use kernel size_t to fix user-space builds" * tag 'net-5.16-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (47 commits) fsl/fman: Fix missing put_device() call in fman_port_probe selftests: net: using ping6 for IPv6 in udpgro_fwd.sh Documentation: fix outdated interpretation of ip_no_pmtu_disc net/ncsi: check for error return from call to nla_put_u32 net: bridge: mcast: fix br_multicast_ctx_vlan_global_disabled helper net: fix use-after-free in tw_timer_handler selftests: net: Fix a typo in udpgro_fwd.sh selftests/net: udpgso_bench_tx: fix dst ip argument net: bridge: mcast: add and enforce startup query interval minimum net: bridge: mcast: add and enforce query interval minimum ipv6: raw: check passed optlen before reading xsk: Initialise xskb free_list_node net/mlx5e: Fix wrong features assignment in case of error net/mlx5e: TC, Fix memory leak with rules with internal port ionic: Initialize the 'lif->dbid_inuse' bitmap igc: Fix TX timestamp support for non-MSI-X platforms igc: Do not enable crosstimestamping for i225-V models net/smc: fix kernel panic caused by race of smc_sock net/smc: don't send CDC/LLC message if link not ready NFC: st21nfca: Fix memory leak in device probe and remove ...
2 parents 9bad743 + bf2b09f commit 74c78b4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+405
-237
lines changed

Documentation/networking/ip-sysctl.rst

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ ip_default_ttl - INTEGER
2525
ip_no_pmtu_disc - INTEGER
2626
Disable Path MTU Discovery. If enabled in mode 1 and a
2727
fragmentation-required ICMP is received, the PMTU to this
28-
destination will be set to min_pmtu (see below). You will need
28+
destination will be set to the smallest of the old MTU to
29+
this destination and min_pmtu (see below). You will need
2930
to raise min_pmtu to the smallest interface MTU on your system
3031
manually if you want to avoid locally generated fragments.
3132

@@ -49,7 +50,8 @@ ip_no_pmtu_disc - INTEGER
4950
Default: FALSE
5051

5152
min_pmtu - INTEGER
52-
default 552 - minimum discovered Path MTU
53+
default 552 - minimum Path MTU. Unless this is changed mannually,
54+
each cached pmtu will never be lower than this setting.
5355

5456
ip_forward_use_pmtu - BOOLEAN
5557
By default we don't trust protocol path MTUs while forwarding

drivers/isdn/mISDN/core.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ mISDNInit(void)
381381
err = mISDN_inittimer(&debug);
382382
if (err)
383383
goto error2;
384-
err = l1_init(&debug);
384+
err = Isdnl1_Init(&debug);
385385
if (err)
386386
goto error3;
387387
err = Isdnl2_Init(&debug);
@@ -395,7 +395,7 @@ mISDNInit(void)
395395
error5:
396396
Isdnl2_cleanup();
397397
error4:
398-
l1_cleanup();
398+
Isdnl1_cleanup();
399399
error3:
400400
mISDN_timer_cleanup();
401401
error2:
@@ -408,7 +408,7 @@ static void mISDN_cleanup(void)
408408
{
409409
misdn_sock_cleanup();
410410
Isdnl2_cleanup();
411-
l1_cleanup();
411+
Isdnl1_cleanup();
412412
mISDN_timer_cleanup();
413413
class_unregister(&mISDN_class);
414414

drivers/isdn/mISDN/core.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ struct Bprotocol *get_Bprotocol4id(u_int);
6060
extern int mISDN_inittimer(u_int *);
6161
extern void mISDN_timer_cleanup(void);
6262

63-
extern int l1_init(u_int *);
64-
extern void l1_cleanup(void);
63+
extern int Isdnl1_Init(u_int *);
64+
extern void Isdnl1_cleanup(void);
6565
extern int Isdnl2_Init(u_int *);
6666
extern void Isdnl2_cleanup(void);
6767

drivers/isdn/mISDN/layer1.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ create_l1(struct dchannel *dch, dchannel_l1callback *dcb) {
398398
EXPORT_SYMBOL(create_l1);
399399

400400
int
401-
l1_init(u_int *deb)
401+
Isdnl1_Init(u_int *deb)
402402
{
403403
debug = deb;
404404
l1fsm_s.state_count = L1S_STATE_COUNT;
@@ -409,7 +409,7 @@ l1_init(u_int *deb)
409409
}
410410

411411
void
412-
l1_cleanup(void)
412+
Isdnl1_cleanup(void)
413413
{
414414
mISDN_FsmFree(&l1fsm_s);
415415
}

drivers/net/ethernet/aquantia/atlantic/aq_ring.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,10 @@ int aq_ring_rx_clean(struct aq_ring_s *self,
366366
if (!buff->is_eop) {
367367
buff_ = buff;
368368
do {
369+
if (buff_->next >= self->size) {
370+
err = -EIO;
371+
goto err_exit;
372+
}
369373
next_ = buff_->next,
370374
buff_ = &self->buff_ring[next_];
371375
is_rsc_completed =
@@ -389,6 +393,10 @@ int aq_ring_rx_clean(struct aq_ring_s *self,
389393
(buff->is_lro && buff->is_cso_err)) {
390394
buff_ = buff;
391395
do {
396+
if (buff_->next >= self->size) {
397+
err = -EIO;
398+
goto err_exit;
399+
}
392400
next_ = buff_->next,
393401
buff_ = &self->buff_ring[next_];
394402

drivers/net/ethernet/atheros/ag71xx.c

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1913,23 +1913,20 @@ static int ag71xx_probe(struct platform_device *pdev)
19131913
ag->mac_reset = devm_reset_control_get(&pdev->dev, "mac");
19141914
if (IS_ERR(ag->mac_reset)) {
19151915
netif_err(ag, probe, ndev, "missing mac reset\n");
1916-
err = PTR_ERR(ag->mac_reset);
1917-
goto err_free;
1916+
return PTR_ERR(ag->mac_reset);
19181917
}
19191918

19201919
ag->mac_base = devm_ioremap(&pdev->dev, res->start, resource_size(res));
1921-
if (!ag->mac_base) {
1922-
err = -ENOMEM;
1923-
goto err_free;
1924-
}
1920+
if (!ag->mac_base)
1921+
return -ENOMEM;
19251922

19261923
ndev->irq = platform_get_irq(pdev, 0);
19271924
err = devm_request_irq(&pdev->dev, ndev->irq, ag71xx_interrupt,
19281925
0x0, dev_name(&pdev->dev), ndev);
19291926
if (err) {
19301927
netif_err(ag, probe, ndev, "unable to request IRQ %d\n",
19311928
ndev->irq);
1932-
goto err_free;
1929+
return err;
19331930
}
19341931

19351932
ndev->netdev_ops = &ag71xx_netdev_ops;
@@ -1957,10 +1954,8 @@ static int ag71xx_probe(struct platform_device *pdev)
19571954
ag->stop_desc = dmam_alloc_coherent(&pdev->dev,
19581955
sizeof(struct ag71xx_desc),
19591956
&ag->stop_desc_dma, GFP_KERNEL);
1960-
if (!ag->stop_desc) {
1961-
err = -ENOMEM;
1962-
goto err_free;
1963-
}
1957+
if (!ag->stop_desc)
1958+
return -ENOMEM;
19641959

19651960
ag->stop_desc->data = 0;
19661961
ag->stop_desc->ctrl = 0;
@@ -1975,15 +1970,15 @@ static int ag71xx_probe(struct platform_device *pdev)
19751970
err = of_get_phy_mode(np, &ag->phy_if_mode);
19761971
if (err) {
19771972
netif_err(ag, probe, ndev, "missing phy-mode property in DT\n");
1978-
goto err_free;
1973+
return err;
19791974
}
19801975

19811976
netif_napi_add(ndev, &ag->napi, ag71xx_poll, AG71XX_NAPI_WEIGHT);
19821977

19831978
err = clk_prepare_enable(ag->clk_eth);
19841979
if (err) {
19851980
netif_err(ag, probe, ndev, "Failed to enable eth clk.\n");
1986-
goto err_free;
1981+
return err;
19871982
}
19881983

19891984
ag71xx_wr(ag, AG71XX_REG_MAC_CFG1, 0);
@@ -2019,8 +2014,6 @@ static int ag71xx_probe(struct platform_device *pdev)
20192014
ag71xx_mdio_remove(ag);
20202015
err_put_clk:
20212016
clk_disable_unprepare(ag->clk_eth);
2022-
err_free:
2023-
free_netdev(ndev);
20242017
return err;
20252018
}
20262019

drivers/net/ethernet/freescale/fman/fman_port.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1805,15 +1805,15 @@ static int fman_port_probe(struct platform_device *of_dev)
18051805
fman = dev_get_drvdata(&fm_pdev->dev);
18061806
if (!fman) {
18071807
err = -EINVAL;
1808-
goto return_err;
1808+
goto put_device;
18091809
}
18101810

18111811
err = of_property_read_u32(port_node, "cell-index", &val);
18121812
if (err) {
18131813
dev_err(port->dev, "%s: reading cell-index for %pOF failed\n",
18141814
__func__, port_node);
18151815
err = -EINVAL;
1816-
goto return_err;
1816+
goto put_device;
18171817
}
18181818
port_id = (u8)val;
18191819
port->dts_params.id = port_id;
@@ -1847,7 +1847,7 @@ static int fman_port_probe(struct platform_device *of_dev)
18471847
} else {
18481848
dev_err(port->dev, "%s: Illegal port type\n", __func__);
18491849
err = -EINVAL;
1850-
goto return_err;
1850+
goto put_device;
18511851
}
18521852

18531853
port->dts_params.type = port_type;
@@ -1861,7 +1861,7 @@ static int fman_port_probe(struct platform_device *of_dev)
18611861
dev_err(port->dev, "%s: incorrect qman-channel-id\n",
18621862
__func__);
18631863
err = -EINVAL;
1864-
goto return_err;
1864+
goto put_device;
18651865
}
18661866
port->dts_params.qman_channel_id = qman_channel_id;
18671867
}
@@ -1871,7 +1871,7 @@ static int fman_port_probe(struct platform_device *of_dev)
18711871
dev_err(port->dev, "%s: of_address_to_resource() failed\n",
18721872
__func__);
18731873
err = -ENOMEM;
1874-
goto return_err;
1874+
goto put_device;
18751875
}
18761876

18771877
port->dts_params.fman = fman;
@@ -1896,6 +1896,8 @@ static int fman_port_probe(struct platform_device *of_dev)
18961896

18971897
return 0;
18981898

1899+
put_device:
1900+
put_device(&fm_pdev->dev);
18991901
return_err:
19001902
of_node_put(port_node);
19011903
free_port:

drivers/net/ethernet/intel/igc/igc_main.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5467,6 +5467,9 @@ static irqreturn_t igc_intr_msi(int irq, void *data)
54675467
mod_timer(&adapter->watchdog_timer, jiffies + 1);
54685468
}
54695469

5470+
if (icr & IGC_ICR_TS)
5471+
igc_tsync_interrupt(adapter);
5472+
54705473
napi_schedule(&q_vector->napi);
54715474

54725475
return IRQ_HANDLED;
@@ -5510,6 +5513,9 @@ static irqreturn_t igc_intr(int irq, void *data)
55105513
mod_timer(&adapter->watchdog_timer, jiffies + 1);
55115514
}
55125515

5516+
if (icr & IGC_ICR_TS)
5517+
igc_tsync_interrupt(adapter);
5518+
55135519
napi_schedule(&q_vector->napi);
55145520

55155521
return IRQ_HANDLED;

drivers/net/ethernet/intel/igc/igc_ptp.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,20 @@ int igc_ptp_get_ts_config(struct net_device *netdev, struct ifreq *ifr)
768768
*/
769769
static bool igc_is_crosststamp_supported(struct igc_adapter *adapter)
770770
{
771-
return IS_ENABLED(CONFIG_X86_TSC) ? pcie_ptm_enabled(adapter->pdev) : false;
771+
if (!IS_ENABLED(CONFIG_X86_TSC))
772+
return false;
773+
774+
/* FIXME: it was noticed that enabling support for PCIe PTM in
775+
* some i225-V models could cause lockups when bringing the
776+
* interface up/down. There should be no downsides to
777+
* disabling crosstimestamping support for i225-V, as it
778+
* doesn't have any PTP support. That way we gain some time
779+
* while root causing the issue.
780+
*/
781+
if (adapter->pdev->device == IGC_DEV_ID_I225_V)
782+
return false;
783+
784+
return pcie_ptm_enabled(adapter->pdev);
772785
}
773786

774787
static struct system_counterval_t igc_device_tstamp_to_system(u64 tstamp)

drivers/net/ethernet/lantiq_xrx200.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ static int xrx200_hw_receive(struct xrx200_chan *ch)
224224
skb->protocol = eth_type_trans(skb, net_dev);
225225
netif_receive_skb(skb);
226226
net_dev->stats.rx_packets++;
227-
net_dev->stats.rx_bytes += len - ETH_FCS_LEN;
227+
net_dev->stats.rx_bytes += len;
228228

229229
return 0;
230230
}

0 commit comments

Comments
 (0)