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

hwmon: (stts751) buffer overrun on wrong chip configuration

If stts751 hw by some reason reports conversion rate bigger then 9:
ret = i2c_smbus_read_byte_data(priv->client, STTS751_REG_RATE);
then dereferencing stts751_intervals[priv->interval] leads to buffer
overrun.

The patch adds sanity check for value stored on chip.

Found by Linux Driver Verification project (linuxtesting.org).

Fixes: 7f07ec0fa17a ("hwmon: new driver for ST stts751 thermal sensor")
Signed-off-by: Anton Vasilyev <vasilyev@ispras.ru>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>

authored by

Anton Vasilyev and committed by
Guenter Roeck
3be6bd69 7576750f

+4
+4
drivers/hwmon/stts751.c
··· 718 718 ret = i2c_smbus_read_byte_data(priv->client, STTS751_REG_RATE); 719 719 if (ret < 0) 720 720 return ret; 721 + if (ret >= ARRAY_SIZE(stts751_intervals)) { 722 + dev_err(priv->dev, "Unrecognized conversion rate 0x%x\n", ret); 723 + return -ENODEV; 724 + } 721 725 priv->interval = ret; 722 726 723 727 ret = stts751_read_reg16(priv, &priv->event_max,