s6gmac: Read buffer overflow
authorroel kluin <roel.kluin@gmail.com>
Sat, 1 Aug 2009 20:20:13 +0000 (20:20 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sun, 2 Aug 2009 19:20:40 +0000 (12:20 -0700)
Check whether index is within bounds before testing the element.
In the last iteration i is PHY_MAX_ADDR. the condition
`!(p = pd->mii.bus->phy_map[PHY_MAX_ADDR])' is undefined and may
evaluate to false, which leads to a dereference of this invalid
phy_map in the phy_connect() below.

Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/s6gmac.c

index 5345e47..4525cbe 100644 (file)
@@ -793,7 +793,7 @@ static inline int s6gmac_phy_start(struct net_device *dev)
        struct s6gmac *pd = netdev_priv(dev);
        int i = 0;
        struct phy_device *p = NULL;
-       while ((!(p = pd->mii.bus->phy_map[i])) && (i < PHY_MAX_ADDR))
+       while ((i < PHY_MAX_ADDR) && (!(p = pd->mii.bus->phy_map[i])))
                i++;
        p = phy_connect(dev, dev_name(&p->dev), &s6gmac_adjust_link, 0,
                        PHY_INTERFACE_MODE_RGMII);