[PATCH 1/2] net: zynq_gem: plug resource leaks in .probe and .remove

Graeme Smecher <[email protected]>
Newsgroups gmane.comp.boot-loaders.u-boot.general,gmane.comp.boot-loaders.u-boot
Message-ID <[email protected]>
zynq_gem_probe() allocates receive buffers, buffer descriptor space and
(usually) an MDIO bus, but these are leaked on some error paths.

zynq_gem_remove() never freed priv->tx_bd and priv->rxbuffers at all.

Signed-off-by: Graeme Smecher <[email protected]>
---

 drivers/net/zynq_gem.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/drivers/net/zynq_gem.c b/drivers/net/zynq_gem.c
index f570ae9ee73..a41a50e0113 100644
--- a/drivers/net/zynq_gem.c
+++ b/drivers/net/zynq_gem.c
@@ -998,13 +998,19 @@ static int zynq_gem_probe(struct udevice *dev)
 
 	if (!priv->bus) {
 		priv->bus = mdio_alloc();
+		if (!priv->bus) {
+			ret = -ENOMEM;
+			goto err2;
+		}
 		priv->bus->read = zynq_gem_miiphy_read;
 		priv->bus->write = zynq_gem_miiphy_write;
 		priv->bus->priv = priv;
 
 		ret = mdio_register_seq(priv->bus, dev_seq(dev));
-		if (ret)
+		if (ret) {
+			mdio_free(priv->bus);
 			goto err2;
+		}
 	}
 
 	if (IS_ENABLED(CONFIG_DM_ETH_PHY))
@@ -1024,13 +1030,13 @@ static int zynq_gem_probe(struct udevice *dev)
 					dev_err
 					(dev,
 					 "Failed to set gem dynamic config\n");
-					return ret;
+					goto err3;
 				}
 			}
 		}
 		ret = generic_phy_power_on(&phy);
 		if (ret)
-			return ret;
+			goto err3;
 	}
 
 	printf("\nZYNQ GEM: %lx, mdio bus %lx, phyaddr %d, interface %s\n",
@@ -1041,6 +1047,7 @@ static int zynq_gem_probe(struct udevice *dev)
 
 err3:
 	mdio_unregister(priv->bus);
+	mdio_free(priv->bus);
 err2:
 	free(priv->tx_bd);
 err1:
@@ -1055,6 +1062,8 @@ static int zynq_gem_remove(struct udevice *dev)
 	free(priv->phydev);
 	mdio_unregister(priv->bus);
 	mdio_free(priv->bus);
+	free(priv->tx_bd);
+	free(priv->rxbuffers);
 
 	return 0;
 }
---
base-commit: ece349ade2973e220f524ce59e59711cc919263f
branch: zynq-gem-remove-leak

-- 
2.47.3
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.