From 4eedca1766728fb01ec48b17880aba67bc76459e Mon Sep 17 00:00:00 2001 From: Horatiu Vultur Date: Wed, 11 May 2022 22:40:59 +0200 Subject: [PATCH] net: lan966x: Fix use of pointer after being freed The smatch found the following warning: drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c:736 lan966x_fdma_reload() warn: 'rx_dcbs' was already freed. This issue can happen when changing the MTU on one of the ports and once the RX buffers are allocated and then the TX buffer allocation fails. In that case the RX buffers should not be restore. This fix this issue such that the RX buffers will not be restored if the TX buffers failed to be allocated. Fixes: 65404903eaa529 ("net: lan966x: Update FDMA to change MTU.") Reported-by: Dan Carpenter Signed-off-by: Horatiu Vultur Link: https://lore.kernel.org/r/20220511204059.2689199-1-horatiu.vultur@microchip.com Signed-off-by: Jakub Kicinski --- drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c b/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c index 9e2a7323eaf03..6dea7f8c14814 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c @@ -729,11 +729,11 @@ static int lan966x_fdma_reload(struct lan966x *lan966x, int new_mtu) return err; restore: lan966x->rx.dma = rx_dma; - lan966x->tx.dma = tx_dma; + lan966x->rx.dcbs = rx_dcbs; lan966x_fdma_rx_start(&lan966x->rx); restore_tx: - lan966x->rx.dcbs = rx_dcbs; + lan966x->tx.dma = tx_dma; lan966x->tx.dcbs = tx_dcbs; lan966x->tx.dcbs_buf = tx_dcbs_buf; -- 2.39.5