G'day list
Coverity found 3 'OVERRUN_STATIC' in de4x5.c, @ lines 4814, 5115 and
5125.
Looking at the code these look like very minor problems, but as they are
easy to fix I though I would do a patch.
The patch below just adds an explicit check for the array index in
type3_infoblock() and corrects a loop exit check, to eliminate an
(array+1) error in mii_get_phy().
Note: A better solution in type3_infoblock() may be to change
- #define MOTO_SROM_BUG ((lp->active == 8) &&
(((le32_to_cpu(get_unaligned(((s32 *)dev->dev_addr))))&0x00ffffff)==0x3e0008))
+ #define MOTO_SROM_BUG ((lp->active >= DE4X5_MAX_PHY) ||
(((le32_to_cpu(get_unaligned(((s32 *)dev->dev_addr))))&0x00ffffff)==0x3e0008
as this seems to make sense, but as i am not sure that this bug happens
when (lp->active < 8) I am reluctant to change this.
Signed-off-by: Darren Jenkins <[EMAIL PROTECTED]>
--- linux-2.6.16-git8/drivers/net/tulip/de4x5.c.orig 2006-03-26
14:36:17.000000000 +1100
+++ linux-2.6.16-git8/drivers/net/tulip/de4x5.c 2006-03-26 17:06:06.000000000
+1100
@@ -4810,7 +4810,8 @@ type3_infoblock(struct net_device *dev,
if (lp->state == INITIALISED) {
lp->ibn = 3;
lp->active = *p++;
- if (MOTO_SROM_BUG) lp->active = 0;
+ if (MOTO_SROM_BUG || lp->active >= DE4X5_MAX_PHY)
+ lp->active = 0;
lp->phy[lp->active].gep = (*p ? p : NULL); p += (2 * (*p) + 1);
lp->phy[lp->active].rst = (*p ? p : NULL); p += (2 * (*p) + 1);
lp->phy[lp->active].mc = TWIDDLE(p); p += 2;
@@ -5111,7 +5112,7 @@ mii_get_phy(struct net_device *dev)
break;
}
if ((j == limit) && (i < DE4X5_MAX_MII)) {
- for (k=0; lp->phy[k].id && (k < DE4X5_MAX_PHY); k++);
+ for (k=0; lp->phy[k].id && (k < DE4X5_MAX_PHY - 1); k++);
lp->phy[k].addr = i;
lp->phy[k].id = id;
lp->phy[k].spd.reg = GENERIC_REG; /* ANLPA register */
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html