Re: [v4l-dvb-maintainer] [2.6 patch]drivers/media/video/bt8xx/bttv-cards.c: fix off-by-one

From: Mauro Carvalho Chehab
Date: Thu Mar 29 2007 - 08:09:18 EST


Hi Adrian,

Em Seg, 2007-03-26 Ãs 06:08 +0200, Adrian Bunk escreveu:
> This patch fixes an off-by-one error spotted by the Coverity checker.

Thanks for pointing us about this. Instead of your patch, however, it is
better to replace all magic numbers at for on all gpiomask stuff. This
will avoid future troubles if this array have any changes on its size.

I'm enclosing a patch doing this fix.

Cheers,
Mauro
Changeset: 5476
From: Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxx>
Commiter: Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxx>
Date: Wed Mar 28 22:37:20 2007 -0300
Subject: Fix gpiomux array size

there were several "magic" for loops, addressing gpiomux array size (4).
Adrian Bunk showed that one of the loops were wrong, going from 0 to 4.
This patch provides the right fix for this trouble, by using ARRAY_SIZE
on all places where we have a for loop using gpiomux.
Thanks to Adrian Bunk <bunk@xxxxxxxxx> for pointing me about this trouble.

Signed-off-by: Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxx>
---

diff -upNr oldtree/drivers/media/video/bt8xx/bttv-cards.c linux/drivers/media/video/bt8xx/bttv-cards.c
--- oldtree/drivers/media/video/bt8xx/bttv-cards.c 2007-03-29 09:00:15.000000000 -0300
+++ linux/drivers/media/video/bt8xx/bttv-cards.c 2007-03-29 09:00:12.000000000 -0300
@@ -2970,20 +2970,20 @@ void __devinit bttv_idcard(struct bttv *

if (UNSET != audiomux[0]) {
gpiobits = 0;
- for (i = 0; i < 4; i++) {
+ for (i = 0; i < ARRAY_SIZE(bttv_tvcards->gpiomux); i++) {
bttv_tvcards[btv->c.type].gpiomux[i] = audiomux[i];
gpiobits |= audiomux[i];
}
} else {
gpiobits = audioall;
- for (i = 0; i < 4; i++) {
+ for (i = 0; i < ARRAY_SIZE(bttv_tvcards->gpiomux); i++) {
bttv_tvcards[btv->c.type].gpiomux[i] = audioall;
}
}
bttv_tvcards[btv->c.type].gpiomask = (UNSET != gpiomask) ? gpiomask : gpiobits;
printk(KERN_INFO "bttv%d: gpio config override: mask=0x%x, mux=",
btv->c.nr,bttv_tvcards[btv->c.type].gpiomask);
- for (i = 0; i < 5; i++) {
+ for (i = 0; i < ARRAY_SIZE(bttv_tvcards->gpiomux); i++) {
printk("%s0x%x", i ? "," : "", bttv_tvcards[btv->c.type].gpiomux[i]);
}
printk("\n");