Thread (3 messages) 3 messages, 2 authors, 22d ago
COLD22d

[PATCH] fix: net: mediatek: mtk_star_mdio_init: fix double of_node_put after devm_of_mdiobus_register

From: WenTao Liang <hidden>
Date: 2026-06-26 15:20:16
Also in: lkml, stable
Subsystem: mediatek ethernet driver, networking drivers, the rest · Maintainers: Felix Fietkau, Lorenzo Bianconi, Andrew Lunn, "David S. Miller", Eric Dumazet, Jakub Kicinski, Paolo Abeni, Linus Torvalds

After devm_of_mdiobus_register succeeds, the mdio_node reference
  ownership is transferred to the mii_bus device (released via
  mdiobus_release on device teardown). However, the function
  unconditionally calls of_node_put(mdio_node) after registration, causing
  a double put.

Only call of_node_put when devm_of_mdiobus_register fails (i.e., when
  ownership was not transferred). On success, the bus driver manages the
  reference lifecycle.

Cc: stable@vger.kernel.org
Fixes: 9ed0a3fac08b ("net: ethernet: mtk-star-emac: use devm_of_mdiobus_register()")
Signed-off-by: WenTao Liang <redacted>
---
 drivers/net/ethernet/mediatek/mtk_star_emac.c | 3 +++
 1 file changed, 3 insertions(+)
diff --git a/drivers/net/ethernet/mediatek/mtk_star_emac.c b/drivers/net/ethernet/mediatek/mtk_star_emac.c
index b83886a41121..b949dd240e6b 100644
--- a/drivers/net/ethernet/mediatek/mtk_star_emac.c
+++ b/drivers/net/ethernet/mediatek/mtk_star_emac.c
@@ -1446,7 +1446,10 @@ static int mtk_star_mdio_init(struct net_device *ndev)
 	priv->mii->priv = priv;
 
 	ret = devm_of_mdiobus_register(dev, priv->mii, mdio_node);
+	if (ret)
+		of_node_put(mdio_node);
 
+	return ret;
 out_put_node:
 	of_node_put(mdio_node);
 	return ret;
-- 
2.39.5 (Apple Git-154)
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help