stmmac_mdio_setup() acquires a reference on the MDIO node through stmmac_of_get_mdio() and stores it in plat->mdio_node. If the allocation of plat->mdio_bus_data fails, the function returns -ENOMEM and the caller takes the error_put_phy path, which only releases plat->phy_node, so the MDIO node reference is leaked. Release plat->mdio_node on this error path. Fixes: 1a981c0586c0 ("net: stmmac: Make MDIO bus reset optional") Cc: stable@vger.kernel.org Signed-off-by: Wentao Liang --- drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c index 5cae2aa72906..09359ccb32ef 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c @@ -356,8 +356,11 @@ 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); + plat->mdio_node = NULL; return -ENOMEM; + } plat->mdio_bus_data->needs_reset = true; } -- 2.34.1