94be878c88
The length of hw->settings->odr_table is 2 and ref_sensor->id is an enum variable whose value is between 0 and 5. However, the value ST_LSM6DSX_ID_MAX (i.e. 5) is not caught properly in switch (sensor->id) { If ref_sensor->id is ST_LSM6DSX_ID_MAX, an array overflow will ocurrs in function st_lsm6dsx_check_odr(): odr_table = &sensor->hw->settings->odr_table[sensor->id]; and in function st_lsm6dsx_set_odr(): reg = &hw->settings->odr_table[ref_sensor->id].reg; To avoid this array overflow, handle ST_LSM6DSX_ID_GYRO explicitly and return -EINVAL for the default case. The enum value ST_LSM6DSX_ID_MAX is only present as an easy way to check the limit and as such is never used, however this is not locally obvious. Reported-by: TOTE Robot <oslab@tsinghua.edu.cn> Signed-off-by: Teng Qi <starmiku1207184332@gmail.com> Acked-by: Lorenzo Bianconi <lorenzo@kernel.org> Link: https://lore.kernel.org/r/20211011114003.976221-1-starmiku1207184332@gmail.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
||
---|---|---|
.. | ||
bmi160 | ||
inv_icm42600 | ||
inv_mpu6050 | ||
st_lsm6dsx | ||
st_lsm9ds0 | ||
adis16400.c | ||
adis16460.c | ||
adis16475.c | ||
adis16480.c | ||
adis_buffer.c | ||
adis_trigger.c | ||
adis.c | ||
fxos8700_core.c | ||
fxos8700_i2c.c | ||
fxos8700_spi.c | ||
fxos8700.h | ||
Kconfig | ||
kmx61.c | ||
Makefile |