[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20220510142247.16071-1-wanjiabing@vivo.com>
Date: Tue, 10 May 2022 22:22:45 +0800
From: Wan Jiabing <wanjiabing@...o.com>
To: Andrew Lunn <andrew@...n.ch>,
Heiner Kallweit <hkallweit1@...il.com>,
Russell King <linux@...linux.org.uk>,
"David S. Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>,
Wan Jiabing <wanjiabing@...o.com>,
Antoine Tenart <atenart@...nel.org>, netdev@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: [PATCH v2 net] net: phy: mscc: Add error check when __phy_read() failed
Calling __phy_read() might return a negative error code. Use 'int'
to declare variables which call __phy_read() and also add error check
for them.
The numerous callers of vsc8584_macsec_phy_read() don't expect it to
fail. So don't return the error code from __phy_read(), but also don't
return random values if it does fail.
Fixes: fa164e40c53b ("net: phy: mscc: split the driver into separate files")
Signed-off-by: Wan Jiabing <wanjiabing@...o.com>
---
Changelog:
v2:
- Sort variable declaration and add a detailed comment.
---
drivers/net/phy/mscc/mscc_macsec.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/net/phy/mscc/mscc_macsec.c b/drivers/net/phy/mscc/mscc_macsec.c
index b7b2521c73fb..58ad11a697b6 100644
--- a/drivers/net/phy/mscc/mscc_macsec.c
+++ b/drivers/net/phy/mscc/mscc_macsec.c
@@ -22,9 +22,9 @@
static u32 vsc8584_macsec_phy_read(struct phy_device *phydev,
enum macsec_bank bank, u32 reg)
{
- u32 val, val_l = 0, val_h = 0;
+ int rc, val, val_l, val_h;
unsigned long deadline;
- int rc;
+ u32 ret = 0;
rc = phy_select_page(phydev, MSCC_PHY_PAGE_MACSEC);
if (rc < 0)
@@ -47,15 +47,20 @@ static u32 vsc8584_macsec_phy_read(struct phy_device *phydev,
deadline = jiffies + msecs_to_jiffies(PROC_CMD_NCOMPLETED_TIMEOUT_MS);
do {
val = __phy_read(phydev, MSCC_EXT_PAGE_MACSEC_19);
+ if (val < 0)
+ goto failed;
} while (time_before(jiffies, deadline) && !(val & MSCC_PHY_MACSEC_19_CMD));
val_l = __phy_read(phydev, MSCC_EXT_PAGE_MACSEC_17);
val_h = __phy_read(phydev, MSCC_EXT_PAGE_MACSEC_18);
+ if (val_l > 0 && val_h > 0)
+ ret = (val_h << 16) | val_l;
+
failed:
phy_restore_page(phydev, rc, rc);
- return (val_h << 16) | val_l;
+ return ret;
}
static void vsc8584_macsec_phy_write(struct phy_device *phydev,
--
2.35.1
Powered by blists - more mailing lists