diff mbox series

iio: adc: mcp3911: Fix out of bounds access of array mcp3911_osr_table

Message ID 20221012134245.5345-1-colin.i.king@gmail.com (mailing list archive)
State Not Applicable
Headers show
Series iio: adc: mcp3911: Fix out of bounds access of array mcp3911_osr_table | expand

Commit Message

Colin Ian King Oct. 12, 2022, 1:42 p.m. UTC
Currently the for-loop is using the size of the array mcp3911_osr_table
as the upper bounds which is 0..31 which is causing an out of bounds
access to the array at indexes 8..31. Fix this using the ARRAY_SIZE
macro to get the size of the array in elements rather than bytes.

Fixes: 6d965885f4ea ("iio: adc: mcp3911: add support for oversampling ratio")
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
---
 drivers/iio/adc/mcp3911.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Marcus Folkesson Oct. 12, 2022, 1:52 p.m. UTC | #1
Hi Colin,

On Wed, Oct 12, 2022 at 02:42:45PM +0100, Colin Ian King wrote:
> Currently the for-loop is using the size of the array mcp3911_osr_table
> as the upper bounds which is 0..31 which is causing an out of bounds
> access to the array at indexes 8..31. Fix this using the ARRAY_SIZE
> macro to get the size of the array in elements rather than bytes.
> 
> Fixes: 6d965885f4ea ("iio: adc: mcp3911: add support for oversampling ratio")
> Signed-off-by: Colin Ian King <colin.i.king@gmail.com>

Thank you for the patch!

Dan was a little bit earlier to catch this though
https://lore.kernel.org/all/20221002132053.113f595f@jic23-huawei/

Best regards,
Marcus Folkesson
diff mbox series

Patch

diff --git a/drivers/iio/adc/mcp3911.c b/drivers/iio/adc/mcp3911.c
index b35fd2c9c3c0..015a9ffdb26a 100644
--- a/drivers/iio/adc/mcp3911.c
+++ b/drivers/iio/adc/mcp3911.c
@@ -248,7 +248,7 @@  static int mcp3911_write_raw(struct iio_dev *indio_dev,
 		break;
 
 	case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
-		for (int i = 0; i < sizeof(mcp3911_osr_table); i++) {
+		for (int i = 0; i < ARRAY_SIZE(mcp3911_osr_table); i++) {
 			if (val == mcp3911_osr_table[i]) {
 				val = FIELD_PREP(MCP3911_CONFIG_OSR, i);
 				ret = mcp3911_update(adc, MCP3911_REG_CONFIG, MCP3911_CONFIG_OSR,