Message ID | 20230614091714.15912-1-ansuelsmth@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [net,v2] net: ethernet: stmicro: stmmac: fix possible memory leak in __stmmac_open | expand |
On Wed, Jun 14, 2023 at 11:17:14AM +0200, Christian Marangi wrote: > Fix a possible memory leak in __stmmac_open when stmmac_init_phy fails. > It's also needed to free everything allocated by stmmac_setup_dma_desc > and not just the dma_conf struct. > > Drop free_dma_desc_resources from __stmmac_open and correctly call > free_dma_desc_resources on each user of __stmmac_open on error. > > Reported-by: Jose Abreu <Jose.Abreu@synopsys.com> > Fixes: ba39b344e924 ("net: ethernet: stmicro: stmmac: generate stmmac dma conf before open") > Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> > Cc: stable@vger.kernel.org Reviewed-by: Simon Horman <simon.horman@corigine.com>
From: Christian Marangi <ansuelsmth@gmail.com> Date: Wed, Jun 14, 2023 at 10:17:14 > Fix a possible memory leak in __stmmac_open when stmmac_init_phy fails. > It's also needed to free everything allocated by stmmac_setup_dma_desc > and not just the dma_conf struct. > > Drop free_dma_desc_resources from __stmmac_open and correctly call > free_dma_desc_resources on each user of __stmmac_open on error. > > Reported-by: Jose Abreu <Jose.Abreu@synopsys.com> > Fixes: ba39b344e924 ("net: ethernet: stmicro: stmmac: generate stmmac dma conf before open") > Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> > Cc: stable@vger.kernel.org Thanks for the fix. Reviewed-by: Jose Abreu <Jose.Abreu@synopsys.com> Thanks, Jose
Hello: This patch was applied to netdev/net.git (main) by Jakub Kicinski <kuba@kernel.org>: On Wed, 14 Jun 2023 11:17:14 +0200 you wrote: > Fix a possible memory leak in __stmmac_open when stmmac_init_phy fails. > It's also needed to free everything allocated by stmmac_setup_dma_desc > and not just the dma_conf struct. > > Drop free_dma_desc_resources from __stmmac_open and correctly call > free_dma_desc_resources on each user of __stmmac_open on error. > > [...] Here is the summary with links: - [net,v2] net: ethernet: stmicro: stmmac: fix possible memory leak in __stmmac_open https://git.kernel.org/netdev/net/c/30134b7c47bd You are awesome, thank you!
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index fa07b0d50b46..5c645b6d5660 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -3877,7 +3877,6 @@ static int __stmmac_open(struct net_device *dev, stmmac_hw_teardown(dev); init_error: - free_dma_desc_resources(priv, &priv->dma_conf); phylink_disconnect_phy(priv->phylink); init_phy_error: pm_runtime_put(priv->device); @@ -3895,6 +3894,9 @@ static int stmmac_open(struct net_device *dev) return PTR_ERR(dma_conf); ret = __stmmac_open(dev, dma_conf); + if (ret) + free_dma_desc_resources(priv, dma_conf); + kfree(dma_conf); return ret; } @@ -5637,12 +5639,15 @@ static int stmmac_change_mtu(struct net_device *dev, int new_mtu) stmmac_release(dev); ret = __stmmac_open(dev, dma_conf); - kfree(dma_conf); if (ret) { + free_dma_desc_resources(priv, dma_conf); + kfree(dma_conf); netdev_err(priv->dev, "failed reopening the interface after MTU change\n"); return ret; } + kfree(dma_conf); + stmmac_set_rx_mode(dev); }
Fix a possible memory leak in __stmmac_open when stmmac_init_phy fails. It's also needed to free everything allocated by stmmac_setup_dma_desc and not just the dma_conf struct. Drop free_dma_desc_resources from __stmmac_open and correctly call free_dma_desc_resources on each user of __stmmac_open on error. Reported-by: Jose Abreu <Jose.Abreu@synopsys.com> Fixes: ba39b344e924 ("net: ethernet: stmicro: stmmac: generate stmmac dma conf before open") Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> Cc: stable@vger.kernel.org --- Changes v2: - Move free_dma_desc_resources to each user of __stmmac_open drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)