platform/chrome: fix memory corruption in ioctl
authorDan Carpenter <dan.carpenter@oracle.com>
Fri, 19 Aug 2022 05:20:36 +0000 (08:20 +0300)
committerTzung-Bi Shih <tzungbi@kernel.org>
Mon, 22 Aug 2022 06:56:45 +0000 (06:56 +0000)
If "s_mem.bytes" is larger than the buffer size it leads to memory
corruption.

Fixes: eda2e30c6684 ("mfd / platform: cros_ec: Miscellaneous character device to talk with the EC")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Guenter Roeck <groeck@chromium.org>
Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
Link: https://lore.kernel.org/r/Yv8dpCFZJdbUT5ye@kili
drivers/platform/chrome/cros_ec_chardev.c

index fd33de5..0de7c25 100644 (file)
@@ -327,6 +327,9 @@ static long cros_ec_chardev_ioctl_readmem(struct cros_ec_dev *ec,
        if (copy_from_user(&s_mem, arg, sizeof(s_mem)))
                return -EFAULT;
 
+       if (s_mem.bytes > sizeof(s_mem.buffer))
+               return -EINVAL;
+
        num = ec_dev->cmd_readmem(ec_dev, s_mem.offset, s_mem.bytes,
                                  s_mem.buffer);
        if (num <= 0)