mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-11-24 12:34:47 +00:00
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 | ||