[PATCH net v5 5/6] net: phy: propagate errors from default port setup

From: Xuanqiang Luo

Date: Sat Aug 22 2026 - 23:59:52 EST


From: Xuanqiang Luo <luoxuanqiang@xxxxxxxxxx>

phy_default_setup_single_port() ignores errors from phy_add_port() and
always reports success. If a PHY driver attach_mdi_port() callback fails,
the phy_port is leaked and PHY probing continues without the expected
default port.

Destroy the port and return the error.

Fixes: 589e934d2735 ("net: phy: Introduce PHY ports representation")
Reviewed-by: Maxime Chevallier <maxime.chevallier@xxxxxxxxxxx>
Signed-off-by: Xuanqiang Luo <luoxuanqiang@xxxxxxxxxx>
---
drivers/net/phy/phy_device.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 691396794decd..8cb0d60fcbba9 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -3483,6 +3483,7 @@ static int phy_default_setup_single_port(struct phy_device *phydev)
{
struct phy_port *port = phy_port_alloc();
unsigned long mode;
+ int ret;

if (!port)
return -ENOMEM;
@@ -3509,9 +3510,11 @@ static int phy_default_setup_single_port(struct phy_device *phydev)
port->pairs = max_t(int, port->pairs,
ethtool_linkmode_n_pairs(mode));

- phy_add_port(phydev, port);
+ ret = phy_add_port(phydev, port);
+ if (ret)
+ phy_port_destroy(port);

- return 0;
+ return ret;
}

static int of_phy_ports(struct phy_device *phydev)
--
2.43.0