diff options
| author | Ernest Van Hoecke <ernest.vanhoecke@toradex.com> | 2026-02-19 18:32:22 +0100 |
|---|---|---|
| committer | Ernest Van Hoecke <ernest.vanhoecke@toradex.com> | 2026-02-23 18:10:36 +0100 |
| commit | f964b63a47f373fb235c8512b165abf342e12e6e (patch) | |
| tree | 2e1e73850d663c5c43a1d2107d9ad28cf726f98c | |
| parent | a75357a7fead48cf38e96eef931b1a1f63473dd9 (diff) | |
net: enetc: mdio: fix regulator leak in enetc_imdio_create error pathtoradex_6.12-2.0.x-imx
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 <ernest.vanhoecke@toradex.com>
| -rw-r--r-- | drivers/net/ethernet/freescale/enetc/enetc_pf_common.c | 5 |
1 files changed, 4 insertions, 1 deletions
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; |
