iio: gts: fix infinite loop for gain_to_scaletables()
authorZicheng Qu <quzicheng@huawei.com>
Thu, 31 Oct 2024 01:46:26 +0000 (01:46 +0000)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Thu, 31 Oct 2024 21:49:26 +0000 (21:49 +0000)
In iio_gts_build_avail_time_table(), it is checked that gts->num_itime is
non-zero, but gts->num_itime is not checked in gain_to_scaletables(). The
variable time_idx is initialized as gts->num_itime - 1. This implies that
time_idx might initially be set to -1 (0 - 1 = -1). Consequently, using
while (time_idx--) could lead to an infinite loop.

Cc: stable@vger.kernel.org # v6.6+
Fixes: 38416c28e168 ("iio: light: Add gain-time-scale helpers")
Signed-off-by: Zicheng Qu <quzicheng@huawei.com>
Reviewed-by: Matti Vaittinen <mazziesaccount@gmail.com>
Link: https://patch.msgid.link/20241031014626.2313077-1-quzicheng@huawei.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/industrialio-gts-helper.c

index 4ad9496..291c0fc 100644 (file)
@@ -205,7 +205,7 @@ static int gain_to_scaletables(struct iio_gts *gts, int **gains, int **scales)
        memcpy(all_gains, gains[time_idx], gain_bytes);
        new_idx = gts->num_hwgain;
 
-       while (time_idx--) {
+       while (time_idx-- > 0) {
                for (j = 0; j < gts->num_hwgain; j++) {
                        int candidate = gains[time_idx][j];
                        int chk;