linux/drivers/net/ethernet/stmicro/stmmac
Aaro Koskinen 223a960c01 net: stmmac: fix memory corruption with large MTUs
When using 16K DMA buffers and ring mode, the DES3 refill is not working
correctly as the function is using a bogus pointer for checking the
private data. As a result stale pointers will remain in the RX descriptor
ring, so DMA will now likely overwrite/corrupt some already freed memory.

As simple reproducer, just receive some UDP traffic:

	# ifconfig eth0 down; ifconfig eth0 mtu 9000; ifconfig eth0 up
	# iperf3 -c 192.168.253.40 -u -b 0 -R

If you didn't crash by now check the RX descriptors to find non-contiguous
RX buffers:

	cat /sys/kernel/debug/stmmaceth/eth0/descriptors_status
	[...]
	1 [0x2be5020]: 0xa3220321 0x9ffc1ffc 0x72d70082 0x130e207e
					     ^^^^^^^^^^^^^^^^^^^^^
	2 [0x2be5040]: 0xa3220321 0x9ffc1ffc 0x72998082 0x1311a07e
					     ^^^^^^^^^^^^^^^^^^^^^

A simple ping test will now report bad data:

	# ping -s 8200 192.168.253.40
	PING 192.168.253.40 (192.168.253.40) 8200(8228) bytes of data.
	8208 bytes from 192.168.253.40: icmp_seq=1 ttl=64 time=1.00 ms
	wrong data byte #8144 should be 0xd0 but was 0x88

Fix the wrong pointer. Also we must refill DES3 only if the DMA buffer
size is 16K.

Fixes: 54139cf3bb ("net: stmmac: adding multiple buffers for rx")
Signed-off-by: Aaro Koskinen <aaro.koskinen@nokia.com>
Acked-by: Jose Abreu <joabreu@synopsys.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-03-19 13:30:30 -07:00
..
altr_tse_pcs.c
altr_tse_pcs.h
chain_mode.c net: stmmac: Switch stmmac_mode_ops to generic HW Interface Helpers 2018-04-16 18:50:03 -04:00
common.h net: stmmac: Fix RX packet size > 8191 2018-11-08 19:47:44 -08:00
descs_com.h net: stmmac: Fix RX packet size > 8191 2018-11-08 19:47:44 -08:00
descs.h
dwmac4_core.c net: stmmac: Add Flexible PPS support 2018-06-04 10:13:16 -04:00
dwmac4_descs.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2019-02-20 00:34:07 -08:00
dwmac4_descs.h
dwmac4_dma.c Merge ra.kernel.org:/pub/scm/linux/kernel/git/davem/net 2018-07-03 10:29:26 +09:00
dwmac4_dma.h net: stmmac: Set DMA buffer size in HW 2018-06-28 22:24:25 +09:00
dwmac4_lib.c net: stmmac: dwmac4: Also use TBU interrupt to clean TX path 2019-02-21 15:42:34 -08:00
dwmac4.h net: stmmac: Add Flexible PPS support 2018-06-04 10:13:16 -04:00
dwmac5.c net: stmmac: Add Flexible PPS support 2018-06-04 10:13:16 -04:00
dwmac5.h net: stmmac: Add Flexible PPS support 2018-06-04 10:13:16 -04:00
dwmac100_core.c net: stmmac: Implement logic to automatically select HW Interface 2018-04-23 12:03:50 -04:00
dwmac100_dma.c net: stmmac: Uniformize the use of dma_init_* callbacks 2018-05-18 11:00:15 -04:00
dwmac100.h
dwmac1000_core.c net: stmmac: Implement logic to automatically select HW Interface 2018-04-23 12:03:50 -04:00
dwmac1000_dma.c net: stmmac: Uniformize the use of dma_init_* callbacks 2018-05-18 11:00:15 -04:00
dwmac1000.h net: stmmac: Implement logic to automatically select HW Interface 2018-04-23 12:03:50 -04:00
dwmac_dma.h
dwmac_lib.c
dwmac-anarion.c
dwmac-dwc-qos-eth.c
dwmac-generic.c net: stmmac: Add the bindings parsing for XGMAC2 2018-08-09 11:16:28 -07:00
dwmac-ipq806x.c
dwmac-lpc18xx.c
dwmac-mediatek.c net-next: stmmac: dwmac-mediatek: remove fine-tune property 2018-12-19 16:24:58 -08:00
dwmac-meson8b.c net: stmmac: dwmac-meson8b: Fix an error handling path in 'meson8b_dwmac_probe()' 2018-06-12 15:36:14 -07:00
dwmac-meson.c
dwmac-oxnas.c
dwmac-qcom-ethqos.c net: stmmac: Fix return value check in qcom_ethqos_probe() 2019-01-24 22:13:03 -08:00
dwmac-rk.c net: stmmac: dwmac-rk: fix error handling in rk_gmac_powerup() 2019-01-27 23:03:38 -08:00
dwmac-socfpga.c net: stmmac: socfpga: add additional ocp reset line for Stratix10 2018-06-20 14:34:26 +09:00
dwmac-sti.c
dwmac-stm32.c net: ethernet: stmmac: update to support all PHY config for stm32mp157c. 2019-03-08 11:48:19 -08:00
dwmac-sun8i.c net: dwmac-sun8i: fix a missing check of of_get_phy_mode 2019-03-12 14:52:00 -07:00
dwmac-sunxi.c net: stmicro: fix a missing check of clk_prepare 2018-12-27 16:20:44 -08:00
dwxgmac2_core.c net: stmmac: Add CBS support in XGMAC2 2018-09-01 17:40:22 -07:00
dwxgmac2_descs.c net: stmmac: Add descriptor related callbacks for XGMAC2 2018-08-09 11:16:28 -07:00
dwxgmac2_dma.c net: stmmac: dwxgmac2: Also use TBU interrupt to clean TX path 2019-02-21 15:42:34 -08:00
dwxgmac2.h net: stmmac: dwxgmac2: Also use TBU interrupt to clean TX path 2019-02-21 15:42:34 -08:00
enh_desc.c net: stmmac: Fix RX packet size > 8191 2018-11-08 19:47:44 -08:00
hwif.c net: stmmac: Enable TC Ops for GMAC >= 4 2018-09-08 10:24:30 -07:00
hwif.h net: stmmac: Add descriptor related callbacks for XGMAC2 2018-08-09 11:16:28 -07:00
Kconfig net: stmmac: Add driver for Qualcomm ethqos 2019-01-22 19:37:59 -08:00
Makefile net: stmmac: Add driver for Qualcomm ethqos 2019-01-22 19:37:59 -08:00
mmc_core.c
mmc.h
norm_desc.c net: stmmac: Let descriptor code get skbuff address 2018-05-18 11:00:16 -04:00
ring_mode.c net: stmmac: fix memory corruption with large MTUs 2019-03-19 13:30:30 -07:00
stmmac_ethtool.c net: stmmac: Fix a race in EEE enable callback 2019-02-18 17:39:11 -08:00
stmmac_hwtstamp.c net: stmmac: Switch stmmac_hwtimestamp to generic HW Interface Helpers 2018-04-16 18:49:55 -04:00
stmmac_main.c net: stmmac: don't set own bit too early for jumbo frames 2019-03-15 11:38:57 -07:00
stmmac_mdio.c net: stmmac: Fix stmmac_mdio_reset() when building stmmac as modules 2018-10-31 18:35:58 -07:00
stmmac_pci.c net: stmmac: Fix PCI module removal leak 2019-01-11 15:35:06 -08:00
stmmac_pcs.h
stmmac_platform.c net: ethernet: stmmac: add management of clk_csr property 2019-03-08 11:48:19 -08:00
stmmac_platform.h
stmmac_ptp.c net: stmmac: Avoid one more sometimes uninitialized Clang warning 2019-03-08 23:20:22 -08:00
stmmac_ptp.h net: stmmac: fix ptp timestamping on Rx on gmac4 2019-02-06 17:28:15 -08:00
stmmac_tc.c net: stmmac: Check if CBS is supported before configuring 2019-01-11 15:35:06 -08:00
stmmac.h net: stmmac: Fix NAPI poll in TX path when in multi-queue 2019-02-21 15:42:34 -08:00