[media] tw686x: Don't go past array
authorMauro Carvalho Chehab <mchehab@osg.samsung.com>
Sat, 23 Apr 2016 09:21:09 +0000 (06:21 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Mon, 25 Apr 2016 12:45:50 +0000 (09:45 -0300)
Depending on the compiler version, currently it produces the
following warnings:
tw686x-video.c: In function 'tw686x_video_init':
tw686x-video.c:65:543: warning: array subscript is above array bounds [-Warray-bounds]

This is actually bogus with the current code, as it currently
hardcodes the framerate to 30 frames/sec, however a potential
use after the array size could happen when the driver adds support
for setting the framerate. So, fix it.

Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/pci/tw686x/tw686x-video.c

index 60d38f1..d2a0147 100644 (file)
@@ -61,8 +61,17 @@ static unsigned int tw686x_fields_map(v4l2_std_id std, unsigned int fps)
                   8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 0, 0
        };
 
-       unsigned int i =
-               (std & V4L2_STD_625_50) ? std_625_50[fps] : std_525_60[fps];
+       unsigned int i;
+
+       if (std & V4L2_STD_525_60) {
+               if (fps > ARRAY_SIZE(std_525_60))
+                       fps = 30;
+               i = std_525_60[fps];
+       } else {
+               if (fps > ARRAY_SIZE(std_625_50))
+                       fps = 25;
+               i = std_625_50[fps];
+       }
 
        return map[i];
 }