stmmac_mdio_setup() looks up the MDIO device tree node and stores it in plat->mdio_node before allocating plat->mdio_bus_data. If that allocation fails, the function returns -ENOMEM without dropping the node reference. The caller jumps to error_put_phy on this error, which only releases plat->phy_node and never reaches error_put_mdio, so the reference taken for the MDIO node is lost. Drop it before returning. Fixes: 1a981c0586c0 ("net: stmmac: Make MDIO bus reset optional") Cc: stable@vger.kernel.org Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex Signed-off-by: Wentao Liang --- drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c index 3ea16d618215..36f31bad11ca 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c @@ -355,8 +355,10 @@ static int stmmac_mdio_setup(struct plat_stmmacenet_data *plat, plat->mdio_bus_data = devm_kzalloc(dev, sizeof(*plat->mdio_bus_data), GFP_KERNEL); - if (!plat->mdio_bus_data) + if (!plat->mdio_bus_data) { + of_node_put(plat->mdio_node); return -ENOMEM; + } plat->mdio_bus_data->needs_reset = true; } -- 2.34.1