video: fbdev: metronomefb: two harmless off by one bugs
authorDan Carpenter <dan.carpenter@oracle.com>
Sat, 30 Jan 2016 14:44:32 +0000 (17:44 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 16 Feb 2016 12:52:43 +0000 (14:52 +0200)
par->metromem_cmd->args[] is an array of 31 elements of size u16.  Here
we have initialized the first "i" elements and want to set the rest to
zero.

The issue here is that ARRAY_SIZE(par->metromem_cmd->args) is 31 and not
32 as in the original code.  It means that we set ->csum to zero, but
that is harmless because we immediately set it to the correct value on
the next line.

Still, the buffer overflow upsets static checkers so let's correct the
math.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/video/fbdev/metronomefb.c

index ad04a01e2761bf03930b3af052fb82aa8e0ccbf9..abb6bbf226d5232caa2b21495a0d65a5b204cbcf 100644 (file)
@@ -354,7 +354,8 @@ static int metronome_powerup_cmd(struct metronomefb_par *par)
        }
 
        /* the rest are 0 */
-       memset((u8 *) (par->metromem_cmd->args + i), 0, (32-i)*2);
+       memset(&par->metromem_cmd->args[i], 0,
+              (ARRAY_SIZE(par->metromem_cmd->args) - i) * 2);
 
        par->metromem_cmd->csum = cs;
 
@@ -376,7 +377,8 @@ static int metronome_config_cmd(struct metronomefb_par *par)
        memcpy(par->metromem_cmd->args, epd_frame_table[par->dt].config,
                sizeof(epd_frame_table[par->dt].config));
        /* the rest are 0 */
-       memset((u8 *) (par->metromem_cmd->args + 4), 0, (32-4)*2);
+       memset(&par->metromem_cmd->args[4], 0,
+              (ARRAY_SIZE(par->metromem_cmd->args) - 4) * 2);
 
        par->metromem_cmd->csum = 0xCC10;
        par->metromem_cmd->csum += calc_img_cksum(par->metromem_cmd->args, 4);