| From 8710bd2a002a52118bb6d6c0bd5dc205ac7ba3b9 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 2 Nov 2023 20:26:13 +0100 |
| Subject: i2c: dev: copy userspace array safely |
| |
| From: Philipp Stanner <pstanner@redhat.com> |
| |
| [ Upstream commit cc9c54232f04aef3a5d7f64a0ece7df00f1aaa3d ] |
| |
| i2c-dev.c utilizes memdup_user() to copy a userspace array. This is done |
| without an overflow check. |
| |
| Use the new wrapper memdup_array_user() to copy the array more safely. |
| |
| Suggested-by: Dave Airlie <airlied@redhat.com> |
| Signed-off-by: Philipp Stanner <pstanner@redhat.com> |
| Signed-off-by: Wolfram Sang <wsa@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/i2c/i2c-dev.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c |
| index ab0adaa130dae..dd35f341b16fd 100644 |
| --- a/drivers/i2c/i2c-dev.c |
| +++ b/drivers/i2c/i2c-dev.c |
| @@ -450,8 +450,8 @@ static long i2cdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
| if (rdwr_arg.nmsgs > I2C_RDWR_IOCTL_MAX_MSGS) |
| return -EINVAL; |
| |
| - rdwr_pa = memdup_user(rdwr_arg.msgs, |
| - rdwr_arg.nmsgs * sizeof(struct i2c_msg)); |
| + rdwr_pa = memdup_array_user(rdwr_arg.msgs, |
| + rdwr_arg.nmsgs, sizeof(struct i2c_msg)); |
| if (IS_ERR(rdwr_pa)) |
| return PTR_ERR(rdwr_pa); |
| |
| -- |
| 2.42.0 |
| |