From f964b63a47f373fb235c8512b165abf342e12e6e Mon Sep 17 00:00:00 2001 From: Ernest Van Hoecke Date: Thu, 19 Feb 2026 18:32:22 +0100 Subject: net: enetc: mdio: fix regulator leak in enetc_imdio_create error path When 'enetc_imdio_create()' enables the optional 'serdes' regulator and later fails, the function exits through 'free_mdio_bus' without balancing 'regulator_enable()'. Route those failures through a common 'disable_regulator' label so the regulator is always disabled before freeing the MDIO bus. Link: https://community.nxp.com/t5/iMX95-Early-Access-Partner-for/iMX95-SGMII-support-issues/m-p/2317281 Upstream-Status: Pending Fixes: 5cc8089906c3 ("LF-10639-1 enetc: mdio: add regulator support for both imdio and emdio bus") Signed-off-by: Ernest Van Hoecke --- drivers/net/ethernet/freescale/enetc/enetc_pf_common.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c index 77bd5ef9e2d6..4f7b5060dd26 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c @@ -499,7 +499,7 @@ static int enetc_imdio_create(struct enetc_pf *pf) err = mdiobus_register(bus); if (err) { dev_err(dev, "cannot register internal MDIO bus (%d)\n", err); - goto free_mdio_bus; + goto disable_regulator; } if (is_enetc_rev1(pf->si)) { @@ -548,6 +548,9 @@ static int enetc_imdio_create(struct enetc_pf *pf) unregister_mdiobus: mdiobus_unregister(bus); +disable_regulator: + if (mdio_priv->regulator) + regulator_disable(mdio_priv->regulator); free_mdio_bus: mdiobus_free(bus); return err; -- cgit v1.2.3