Commit dc1d3591 authored by Yang Yingliang's avatar Yang Yingliang Committed by Lipeng Sang
Browse files

net: netsec: fix error handling in netsec_register_mdio()

stable inclusion
from stable-v5.10.153
commit 62f0a08e82a6312efd7df7f595c0b11d4ffde610
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I64YCA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=62f0a08e82a6312efd7df7f595c0b11d4ffde610



--------------------------------

[ Upstream commit 94423589 ]

If phy_device_register() fails, phy_device_free() need be called to
put refcount, so memory of phy device and device name can be freed
in callback function.

If get_phy_device() fails, mdiobus_unregister() need be called,
or it will cause warning in mdiobus_free() and kobject is leaked.

Fixes: 533dd11a ("net: socionext: Add Synquacer NetSec driver")
Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
Link: https://lore.kernel.org/r/20221019064104.3228892-1-yangyingliang@huawei.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarLipeng Sang <sanglipeng1@jd.com>
parent f7f37a7a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1962,11 +1962,13 @@ static int netsec_register_mdio(struct netsec_priv *priv, u32 phy_addr)
			ret = PTR_ERR(priv->phydev);
			dev_err(priv->dev, "get_phy_device err(%d)\n", ret);
			priv->phydev = NULL;
			mdiobus_unregister(bus);
			return -ENODEV;
		}

		ret = phy_device_register(priv->phydev);
		if (ret) {
			phy_device_free(priv->phydev);
			mdiobus_unregister(bus);
			dev_err(priv->dev,
				"phy_device_register err(%d)\n", ret);