V4L/DVB (3568b): saa7111: Prevent array overrun
authorJean Delvare <khali@linux-fr.org>
Wed, 22 Mar 2006 06:48:32 +0000 (03:48 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Thu, 23 Mar 2006 14:24:05 +0000 (11:24 -0300)
Explicitely state the number of registers the SAA7111 has, and use that
defined value where relevant.  This should prevent any future array overrun
like the one I just fixed in the saa7110 driver.

This patch also saves 8 bytes of memory as a side effect, as the register
cache was larger than needed.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/video/saa7111.c

index 8c06592..a2e1ccb 100644 (file)
@@ -70,8 +70,10 @@ MODULE_PARM_DESC(debug, "Debug level (0-1)");
 
 /* ----------------------------------------------------------------------- */
 
+#define SAA7111_NR_REG         0x18
+
 struct saa7111 {
-       unsigned char reg[32];
+       unsigned char reg[SAA7111_NR_REG];
 
        int norm;
        int input;
@@ -227,11 +229,11 @@ saa7111_command (struct i2c_client *client,
        {
                int i;
 
-               for (i = 0; i < 32; i += 16) {
+               for (i = 0; i < SAA7111_NR_REG; i += 16) {
                        int j;
 
                        printk(KERN_DEBUG "%s: %03x", I2C_NAME(client), i);
-                       for (j = 0; j < 16; ++j) {
+                       for (j = 0; j < 16 && i + j < SAA7111_NR_REG; ++j) {
                                printk(" %02x",
                                       saa7111_read(client, i + j));
                        }