[PATCH net v1 2/2] net: phy: call driver remove when core initialization fails

From: Xuanqiang Luo

Date: Wed Aug 12 2026 - 08:59:05 EST


From: Xuanqiang Luo <luoxuanqiang@xxxxxxxxxx>

phy_probe() may fail while querying features or completing other core
initialization after the PHY driver probe callback has succeeded. The
driver core does not run the remove path after a probe error, so
resources that the PHY driver releases in its remove callback are
leaked.

Call the PHY driver remove callback on these failures.

Fixes: efbdfdc29bdd ("net: phy: Add support for asking the PHY its abilities")
Signed-off-by: Xuanqiang Luo <luoxuanqiang@xxxxxxxxxx>
---
drivers/net/phy/phy_device.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index f8e434daab66e..be714758360b2 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -3705,7 +3705,7 @@ static int phy_probe(struct device *dev)
err = genphy_read_abilities(phydev);

if (err)
- goto out_reset;
+ goto out_remove;

if (!linkmode_test_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
phydev->supported))
@@ -3722,7 +3722,7 @@ static int phy_probe(struct device *dev)

err = phy_setup_ports(phydev);
if (err)
- goto out_reset;
+ goto out_remove;

phy_advertise_supported(phydev);

@@ -3799,6 +3799,10 @@ static int phy_probe(struct device *dev)

phy_cleanup_ports(phydev);

+out_remove:
+ if (phydev->drv->remove)
+ phydev->drv->remove(phydev);
+
out_reset:
/* Re-assert the reset signal on error */
phy_device_reset(phydev, 1);
--
2.43.0