From: "John W. Linville" Add bounds checking to usage of hw_checksums module parameter array. Signed-off-by: John W. Linville Signed-off-by: Andrew Morton --- drivers/net/3c59x.c | 16 +++++++++------- 1 files changed, 9 insertions(+), 7 deletions(-) diff -puN drivers/net/3c59x.c~3c59x-bounds-checking-for-hw_checksums drivers/net/3c59x.c --- devel/drivers/net/3c59x.c~3c59x-bounds-checking-for-hw_checksums 2005-10-17 14:58:13.000000000 -0700 +++ devel-akpm/drivers/net/3c59x.c 2005-10-17 15:00:38.000000000 -0700 @@ -1513,9 +1513,10 @@ static int __devinit vortex_probe1(struc dev->hard_start_xmit = boomerang_start_xmit; /* Actually, it still should work with iommu. */ dev->features |= NETIF_F_SG; - if (((hw_checksums[card_idx] == -1) && (vp->drv_flags & HAS_HWCKSM)) || - (hw_checksums[card_idx] == 1)) { - dev->features |= NETIF_F_IP_CSUM; + if (card_idx < MAX_UNITS && + ((hw_checksums[card_idx] == -1 && (vp->drv_flags & HAS_HWCKSM)) || + hw_checksums[card_idx] == 1)) { + dev->features |= NETIF_F_IP_CSUM; } } else { dev->hard_start_xmit = vortex_start_xmit; @@ -2791,10 +2792,11 @@ vortex_close(struct net_device *dev) } #if DO_ZEROCOPY - if ( vp->rx_csumhits && - ((vp->drv_flags & HAS_HWCKSM) == 0) && - (hw_checksums[vp->card_idx] == -1)) { - printk(KERN_WARNING "%s supports hardware checksums, and we're not using them!\n", dev->name); + if (vp->rx_csumhits && + (vp->drv_flags & HAS_HWCKSM) == 0 && + (vp->card_idx >= MAX_UNITS || hw_checksums[vp->card_idx] == -1)) { + printk(KERN_WARNING "%s supports hardware checksums, and we're " + "not using them!\n", dev->name); } #endif _