diff options
author | roel kluin <roel.kluin@gmail.com> | 2009-08-02 00:20:13 +0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-08-02 23:20:40 +0400 |
commit | 54706d99051582993037be5a076aa543fd7f1c38 (patch) | |
tree | 74462b9fc52835114b8e28b72829dabc1e92342e /drivers/net/s6gmac.c | |
parent | 1b994b5a1b3cb5395598a08ef3bb0ac118d75c1b (diff) | |
download | linux-54706d99051582993037be5a076aa543fd7f1c38.tar.xz |
s6gmac: Read buffer overflow
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>
Diffstat (limited to 'drivers/net/s6gmac.c')
-rw-r--r-- | drivers/net/s6gmac.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/s6gmac.c b/drivers/net/s6gmac.c index 5345e47b35ac..4525cbe8dd69 100644 --- a/drivers/net/s6gmac.c +++ b/drivers/net/s6gmac.c @@ -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); |