]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: usb: lan78xx: Fix error handling in MII read/write functions
authorOleksij Rempel <o.rempel@pengutronix.de>
Wed, 4 Dec 2024 08:41:37 +0000 (09:41 +0100)
committerJakub Kicinski <kuba@kernel.org>
Sat, 7 Dec 2024 01:53:07 +0000 (17:53 -0800)
Ensure proper error handling in `lan78xx_mdiobus_read` and
`lan78xx_mdiobus_write` by checking return values of register read/write
operations and returning errors to the caller.

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://patch.msgid.link/20241204084142.1152696-6-o.rempel@pengutronix.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/usb/lan78xx.c

index 94320deaaeea8e2043c81e4d782a11cadb903a34..ee308be1e618def5422ee1a5d4c58c62959fb792 100644 (file)
@@ -2136,12 +2136,16 @@ static int lan78xx_mdiobus_read(struct mii_bus *bus, int phy_id, int idx)
        /* set the address, index & direction (read from PHY) */
        addr = mii_access(phy_id, idx, MII_READ);
        ret = lan78xx_write_reg(dev, MII_ACC, addr);
+       if (ret < 0)
+               goto done;
 
        ret = lan78xx_phy_wait_not_busy(dev);
        if (ret < 0)
                goto done;
 
        ret = lan78xx_read_reg(dev, MII_DATA, &val);
+       if (ret < 0)
+               goto done;
 
        ret = (int)(val & 0xFFFF);
 
@@ -2172,10 +2176,14 @@ static int lan78xx_mdiobus_write(struct mii_bus *bus, int phy_id, int idx,
 
        val = (u32)regval;
        ret = lan78xx_write_reg(dev, MII_DATA, val);
+       if (ret < 0)
+               goto done;
 
        /* set the address, index & direction (write to PHY) */
        addr = mii_access(phy_id, idx, MII_WRITE);
        ret = lan78xx_write_reg(dev, MII_ACC, addr);
+       if (ret < 0)
+               goto done;
 
        ret = lan78xx_phy_wait_not_busy(dev);
        if (ret < 0)
@@ -2184,7 +2192,7 @@ static int lan78xx_mdiobus_write(struct mii_bus *bus, int phy_id, int idx,
 done:
        mutex_unlock(&dev->phy_mutex);
        usb_autopm_put_interface(dev->intf);
-       return 0;
+       return ret;
 }
 
 static int lan78xx_mdio_init(struct lan78xx_net *dev)