]> git.ipfire.org Git - people/ms/linux.git/commitdiff
autofs4 copy_dev_ioctl(): keep the value of ->size we'd used for allocation
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 22 Feb 2015 03:19:57 +0000 (22:19 -0500)
committerJiri Slaby <jslaby@suse.cz>
Thu, 12 Mar 2015 16:31:18 +0000 (17:31 +0100)
commit 0a280962dc6e117e0e4baa668453f753579265d9 upstream.

X-Coverup: just ask spender
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
fs/autofs4/dev-ioctl.c

index 0f00da329e718ab465ddb1488dda626db71cca23..792234f15b9f0c79be4d700e1c4f4283f28414f9 100644 (file)
@@ -95,7 +95,7 @@ static int check_dev_ioctl_version(int cmd, struct autofs_dev_ioctl *param)
  */
 static struct autofs_dev_ioctl *copy_dev_ioctl(struct autofs_dev_ioctl __user *in)
 {
-       struct autofs_dev_ioctl tmp;
+       struct autofs_dev_ioctl tmp, *res;
 
        if (copy_from_user(&tmp, in, sizeof(tmp)))
                return ERR_PTR(-EFAULT);
@@ -103,7 +103,11 @@ static struct autofs_dev_ioctl *copy_dev_ioctl(struct autofs_dev_ioctl __user *i
        if (tmp.size < sizeof(tmp))
                return ERR_PTR(-EINVAL);
 
-       return memdup_user(in, tmp.size);
+       res = memdup_user(in, tmp.size);
+       if (!IS_ERR(res))
+               res->size = tmp.size;
+
+       return res;
 }
 
 static inline void free_dev_ioctl(struct autofs_dev_ioctl *param)