aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/s6gmac.c
diff options
context:
space:
mode:
authorroel kluin <roel.kluin@gmail.com>2009-08-01 16:20:13 -0400
committerDavid S. Miller <davem@davemloft.net>2009-08-02 15:20:40 -0400
commit54706d99051582993037be5a076aa543fd7f1c38 (patch)
tree74462b9fc52835114b8e28b72829dabc1e92342e /drivers/net/s6gmac.c
parent1b994b5a1b3cb5395598a08ef3bb0ac118d75c1b (diff)
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.c2
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)
793 struct s6gmac *pd = netdev_priv(dev); 793 struct s6gmac *pd = netdev_priv(dev);
794 int i = 0; 794 int i = 0;
795 struct phy_device *p = NULL; 795 struct phy_device *p = NULL;
796 while ((!(p = pd->mii.bus->phy_map[i])) && (i < PHY_MAX_ADDR)) 796 while ((i < PHY_MAX_ADDR) && (!(p = pd->mii.bus->phy_map[i])))
797 i++; 797 i++;
798 p = phy_connect(dev, dev_name(&p->dev), &s6gmac_adjust_link, 0, 798 p = phy_connect(dev, dev_name(&p->dev), &s6gmac_adjust_link, 0,
799 PHY_INTERFACE_MODE_RGMII); 799 PHY_INTERFACE_MODE_RGMII);