public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] net: lpc_eth: Fix a possible memory leak in lpc_mii_probe()
@ 2026-03-30  8:16 Ma Ke
  2026-03-30 10:04 ` Vladimir Zapolskiy
  0 siblings, 1 reply; 6+ messages in thread
From: Ma Ke @ 2026-03-30  8:16 UTC (permalink / raw)
  To: vz, piotr.wojtaszczyk, andrew+netdev, davem, edumazet, kuba,
	pabeni, alexandre.belloni
  Cc: linux-arm-kernel, netdev, linux-kernel, Ma Ke, stable

lpc_mii_probe() calls of_phy_find_device() to obtain a phy_device
pointer. of_phy_find_device() increments the refcount of the device.
The current implementation does not decrement the refcount after using
the pointer, which leads to a memory leak.

Add phy_device_free() to balance the refcount.

Found by code review.

Signed-off-by: Ma Ke <make24@iscas.ac.cn>
Cc: stable@vger.kernel.org
Fixes: 3503bf024b3e ("net: lpc_eth: parse phy nodes from device tree")
---
 drivers/net/ethernet/nxp/lpc_eth.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/nxp/lpc_eth.c b/drivers/net/ethernet/nxp/lpc_eth.c
index 8b9a3e3bba30..8ce7c9bb6dd6 100644
--- a/drivers/net/ethernet/nxp/lpc_eth.c
+++ b/drivers/net/ethernet/nxp/lpc_eth.c
@@ -751,7 +751,7 @@ static void lpc_handle_link_change(struct net_device *ndev)
 static int lpc_mii_probe(struct net_device *ndev)
 {
 	struct netdata_local *pldat = netdev_priv(ndev);
-	struct phy_device *phydev;
+	struct phy_device *phydev, *phydev_tmp;
 
 	/* Attach to the PHY */
 	if (lpc_phy_interface_mode(&pldat->pdev->dev) == PHY_INTERFACE_MODE_MII)
@@ -760,17 +760,18 @@ static int lpc_mii_probe(struct net_device *ndev)
 		netdev_info(ndev, "using RMII interface\n");
 
 	if (pldat->phy_node)
-		phydev =  of_phy_find_device(pldat->phy_node);
+		phydev_tmp =  of_phy_find_device(pldat->phy_node);
 	else
-		phydev = phy_find_first(pldat->mii_bus);
-	if (!phydev) {
+		phydev_tmp = phy_find_first(pldat->mii_bus);
+	if (!phydev_tmp) {
 		netdev_err(ndev, "no PHY found\n");
 		return -ENODEV;
 	}
 
-	phydev = phy_connect(ndev, phydev_name(phydev),
+	phydev = phy_connect(ndev, phydev_name(phydev_tmp),
 			     &lpc_handle_link_change,
 			     lpc_phy_interface_mode(&pldat->pdev->dev));
+	phy_device_free(phydev_tmp);
 	if (IS_ERR(phydev)) {
 		netdev_err(ndev, "Could not attach to PHY\n");
 		return PTR_ERR(phydev);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-04-20  3:25 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-30  8:16 [PATCH] net: lpc_eth: Fix a possible memory leak in lpc_mii_probe() Ma Ke
2026-03-30 10:04 ` Vladimir Zapolskiy
2026-03-31  0:43   ` Ma Ke
2026-04-01 13:18   ` Ma Ke
2026-04-07 20:58     ` Vladimir Zapolskiy
2026-04-20  3:24       ` Ma Ke

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox