media: i2c: ov9650: fix potential integer overflow in __ov965x_set_frame_interval
authorGustavo A. R. Silva <gustavo@embeddedor.com>
Tue, 30 Jan 2018 00:32:01 +0000 (19:32 -0500)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Fri, 23 Feb 2018 08:03:32 +0000 (03:03 -0500)
Cast fi->interval.numerator to u64 in order to avoid a potential integer
overflow. This variable is being used in a context that expects an
expression of type u64.

Addresses-Coverity-ID: 1324146 ("Unintentional integer overflow")
[Sakari Ailus: use do_div() to make this work on 32-bit systems]

Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/i2c/ov9650.c

index bfd9016..5bea31c 100644 (file)
@@ -1136,8 +1136,8 @@ static int __ov965x_set_frame_interval(struct ov965x *ov965x,
        if (fi->interval.denominator == 0)
                return -EINVAL;
 
-       req_int = (u64)(fi->interval.numerator * 10000) /
-               fi->interval.denominator;
+       req_int = (u64)fi->interval.numerator * 10000;
+       do_div(req_int, fi->interval.denominator);
 
        for (i = 0; i < ARRAY_SIZE(ov965x_intervals); i++) {
                const struct ov965x_interval *iv = &ov965x_intervals[i];