]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
i2o: check copy_from_user() size parameter
authorDan Carpenter <dan.carpenter@oracle.com>
Wed, 20 Mar 2013 04:07:50 +0000 (15:07 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Thu, 21 Mar 2013 05:34:06 +0000 (16:34 +1100)
Limit the size of the copy so we don't corrupt memory.  Hopefully this can
only be called by root, but fixing this makes the static checkers happier.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Cc: Jiri Kosina <jkosina@suse.cz>
Cc: Masanari Iida <standby24x7@gmail.com>
Cc: Alan Cox <alan@linux.intel.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
drivers/message/i2o/i2o_config.c

index 5451beff183ffdf69e24d5d1ca016d11215882a2..a60c188c2bd937255f60f42920e4b9fbba68cb88 100644 (file)
@@ -687,6 +687,11 @@ static int i2o_cfg_passthru32(struct file *file, unsigned cmnd,
                }
                size = size >> 16;
                size *= 4;
+               if (size > sizeof(rmsg)) {
+                       rcode = -EINVAL;
+                       goto sg_list_cleanup;
+               }
+
                /* Copy in the user's I2O command */
                if (copy_from_user(rmsg, user_msg, size)) {
                        rcode = -EFAULT;
@@ -922,6 +927,11 @@ static int i2o_cfg_passthru(unsigned long arg)
                }
                size = size >> 16;
                size *= 4;
+               if (size > sizeof(rmsg)) {
+                       rcode = -EFAULT;
+                       goto sg_list_cleanup;
+               }
+
                /* Copy in the user's I2O command */
                if (copy_from_user(rmsg, user_msg, size)) {
                        rcode = -EFAULT;