Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] stv090x: add an extra protetion against buffer overflow

As pointed by smatch:
drivers/media/dvb-frontends/stv090x.c:2787 stv090x_optimize_carloop() error: buffer overflow 'car_loop_apsk_low' 11 <= 13
drivers/media/dvb-frontends/stv090x.c:2789 stv090x_optimize_carloop() error: buffer overflow 'car_loop_apsk_low' 11 <= 13
drivers/media/dvb-frontends/stv090x.c:2791 stv090x_optimize_carloop() error: buffer overflow 'car_loop_apsk_low' 11 <= 13
drivers/media/dvb-frontends/stv090x.c:2793 stv090x_optimize_carloop() error: buffer overflow 'car_loop_apsk_low' 11 <= 13
drivers/media/dvb-frontends/stv090x.c:2795 stv090x_optimize_carloop() error: buffer overflow 'car_loop_apsk_low' 11 <= 13

The situation of a buffer overflow won't happen, in practice,
with the current values of car_loop table. Yet, the entire logic
that checks for those registration values is too complex. So,
better to add an explicit check, just in case someone changes
the car_loop tables causing a buffer overflow by mistake.

This also helps to remove several smatch warnings, with is good.

Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>

+6
+6
drivers/media/dvb-frontends/stv090x.c
··· 2783 2783 aclc = car_loop[i].crl_pilots_off_30; 2784 2784 } 2785 2785 } else { /* 16APSK and 32APSK */ 2786 + /* 2787 + * This should never happen in practice, except if 2788 + * something is really wrong at the car_loop table. 2789 + */ 2790 + if (i >= 11) 2791 + i = 10; 2786 2792 if (state->srate <= 3000000) 2787 2793 aclc = car_loop_apsk_low[i].crl_pilots_on_2; 2788 2794 else if (state->srate <= 7000000)