Skip to content

Commit

Permalink
net:stmmac: fix memleak in the open method
Browse files Browse the repository at this point in the history
This patch is to fix a memory leak in the open method, it reviews error
conditions freeing the resources previously allocated and not freed in
cased of DMA failure.

Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Giuseppe CAVALLARO authored and David S. Miller committed Jul 4, 2013
1 parent 3630d40 commit c9324d1
Showing 1 changed file with 10 additions and 10 deletions.
20 changes: 10 additions & 10 deletions drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1552,7 +1552,7 @@ static int stmmac_open(struct net_device *dev)
if (ret) {
pr_err("%s: Cannot attach to PHY (error: %d)\n",
__func__, ret);
goto open_error;
goto phy_error;
}
}

Expand All @@ -1566,7 +1566,7 @@ static int stmmac_open(struct net_device *dev)
ret = stmmac_init_dma_engine(priv);
if (ret < 0) {
pr_err("%s: DMA initialization failed\n", __func__);
goto open_error;
goto init_error;
}

/* Copy the MAC addr into the HW */
Expand All @@ -1585,7 +1585,7 @@ static int stmmac_open(struct net_device *dev)
if (unlikely(ret < 0)) {
pr_err("%s: ERROR: allocating the IRQ %d (error: %d)\n",
__func__, dev->irq, ret);
goto open_error;
goto init_error;
}

/* Request the Wake IRQ in case of another line is used for WoL */
Expand All @@ -1595,7 +1595,7 @@ static int stmmac_open(struct net_device *dev)
if (unlikely(ret < 0)) {
pr_err("%s: ERROR: allocating the WoL IRQ %d (%d)\n",
__func__, priv->wol_irq, ret);
goto open_error_wolirq;
goto wolirq_error;
}
}

Expand All @@ -1606,7 +1606,7 @@ static int stmmac_open(struct net_device *dev)
if (unlikely(ret < 0)) {
pr_err("%s: ERROR: allocating the LPI IRQ %d (%d)\n",
__func__, priv->lpi_irq, ret);
goto open_error_lpiirq;
goto lpiirq_error;
}
}

Expand Down Expand Up @@ -1664,17 +1664,17 @@ static int stmmac_open(struct net_device *dev)

return 0;

open_error_lpiirq:
lpiirq_error:
if (priv->wol_irq != dev->irq)
free_irq(priv->wol_irq, dev);

open_error_wolirq:
wolirq_error:
free_irq(dev->irq, dev);

open_error:
init_error:
free_dma_desc_resources(priv);
if (priv->phydev)
phy_disconnect(priv->phydev);

phy_error:
clk_disable_unprepare(priv->stmmac_clk);

return ret;
Expand Down

0 comments on commit c9324d1

Please sign in to comment.