UBSAN: shift-out-of-bounds in set_flicker
Subsystems (2)
PATCH v2 1/1 UBSAN: shift-out-of-bounds in set_flicker
From: Rajeshwar R Shinde <[email protected]>
UBSAN: shift-out-of-bounds in drivers/media/usb/gspca/cpia1.c:1031:27
shift exponent 245 is too large for 32-bit type 'int'
shift-out-of-bounds error was triggered when variable 'sd->params.exposure.gain' is greater than the number of bits of int. When the variable 'currentexp' is left shifted beyond 31 bits then the error is produced. Therefore added the conditional expression to verify valid range.
Tested via syzbot.
Reported-by [email protected]
Signed-off-by Rajeshwar R Shinde <[email protected]>
---v1->v2
changed the patch
changed commit message and tested with checkpatch
--- drivers/media/usb/gspca/cpia1.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/media/usb/gspca/cpia1.c +2 -0
@@ -1028,6 +1028,8 @@ static int set_flicker(struct gspca_dev *gspca_dev, int on, int apply) sd->params.exposure.expMode =2 ; sd->exposure_status =EXPOSURE_NORMAL ; } +if (sd->params.exposure.gain >31 ) +return -1 ; currentexp = currentexp << sd->params.exposure.gain; sd->params.exposure.gain =0 ;/* round down current exposure to nearest value */
Signature · 1 line
2.25.1