OSDN Git Service

net: phy: micrel: fix config_intr error handling
authorJohan Hovold <johan@kernel.org>
Tue, 11 Nov 2014 19:00:08 +0000 (20:00 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 12 Nov 2014 18:55:35 +0000 (13:55 -0500)
Make sure never to update the control register with random data (an
error code) by checking the return value after reading it.

Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/micrel.c

index bcc6c0e..62ca961 100644 (file)
@@ -122,6 +122,8 @@ static int kszphy_config_intr(struct phy_device *phydev)
 
        /* set the interrupt pin active low */
        temp = phy_read(phydev, MII_KSZPHY_CTRL);
+       if (temp < 0)
+               return temp;
        temp &= ~KSZPHY_CTRL_INT_ACTIVE_HIGH;
        phy_write(phydev, MII_KSZPHY_CTRL, temp);
        rc = kszphy_set_interrupt(phydev);
@@ -134,6 +136,8 @@ static int ksz9021_config_intr(struct phy_device *phydev)
 
        /* set the interrupt pin active low */
        temp = phy_read(phydev, MII_KSZPHY_CTRL);
+       if (temp < 0)
+               return temp;
        temp &= ~KSZ9021_CTRL_INT_ACTIVE_HIGH;
        phy_write(phydev, MII_KSZPHY_CTRL, temp);
        rc = kszphy_set_interrupt(phydev);
@@ -146,6 +150,8 @@ static int ks8737_config_intr(struct phy_device *phydev)
 
        /* set the interrupt pin active low */
        temp = phy_read(phydev, MII_KSZPHY_CTRL);
+       if (temp < 0)
+               return temp;
        temp &= ~KS8737_CTRL_INT_ACTIVE_HIGH;
        phy_write(phydev, MII_KSZPHY_CTRL, temp);
        rc = kszphy_set_interrupt(phydev);