Loading drivers/md/dm-ioctl.c +11 −14 Original line number Diff line number Diff line Loading @@ -1501,11 +1501,6 @@ static int check_version(unsigned int cmd, struct dm_ioctl __user *user) return r; } static void free_params(struct dm_ioctl *param) { vfree(param); } static int copy_params(struct dm_ioctl __user *user, struct dm_ioctl **param) { struct dm_ioctl tmp, *dmi; Loading @@ -1520,13 +1515,15 @@ static int copy_params(struct dm_ioctl __user *user, struct dm_ioctl **param) if (!dmi) return -ENOMEM; if (copy_from_user(dmi, user, tmp.data_size)) { vfree(dmi); return -EFAULT; } if (copy_from_user(dmi, user, tmp.data_size)) goto bad; *param = dmi; return 0; bad: vfree(dmi); return -EFAULT; } static int validate_params(uint cmd, struct dm_ioctl *param) Loading Loading @@ -1564,7 +1561,7 @@ static int ctl_ioctl(uint command, struct dm_ioctl __user *user) unsigned int cmd; struct dm_ioctl *uninitialized_var(param); ioctl_fn fn = NULL; size_t param_size; size_t input_param_size; /* only root can play with this */ if (!capable(CAP_SYS_ADMIN)) Loading Loading @@ -1605,6 +1602,7 @@ static int ctl_ioctl(uint command, struct dm_ioctl __user *user) * Copy the parameters into kernel space. */ r = copy_params(user, ¶m); input_param_size = param->data_size; current->flags &= ~PF_MEMALLOC; Loading @@ -1615,9 +1613,8 @@ static int ctl_ioctl(uint command, struct dm_ioctl __user *user) if (r) goto out; param_size = param->data_size; param->data_size = sizeof(*param); r = fn(param, param_size); r = fn(param, input_param_size); /* * Copy the results back to userland. Loading @@ -1626,7 +1623,7 @@ static int ctl_ioctl(uint command, struct dm_ioctl __user *user) r = -EFAULT; out: free_params(param); vfree(param); return r; } Loading Loading
drivers/md/dm-ioctl.c +11 −14 Original line number Diff line number Diff line Loading @@ -1501,11 +1501,6 @@ static int check_version(unsigned int cmd, struct dm_ioctl __user *user) return r; } static void free_params(struct dm_ioctl *param) { vfree(param); } static int copy_params(struct dm_ioctl __user *user, struct dm_ioctl **param) { struct dm_ioctl tmp, *dmi; Loading @@ -1520,13 +1515,15 @@ static int copy_params(struct dm_ioctl __user *user, struct dm_ioctl **param) if (!dmi) return -ENOMEM; if (copy_from_user(dmi, user, tmp.data_size)) { vfree(dmi); return -EFAULT; } if (copy_from_user(dmi, user, tmp.data_size)) goto bad; *param = dmi; return 0; bad: vfree(dmi); return -EFAULT; } static int validate_params(uint cmd, struct dm_ioctl *param) Loading Loading @@ -1564,7 +1561,7 @@ static int ctl_ioctl(uint command, struct dm_ioctl __user *user) unsigned int cmd; struct dm_ioctl *uninitialized_var(param); ioctl_fn fn = NULL; size_t param_size; size_t input_param_size; /* only root can play with this */ if (!capable(CAP_SYS_ADMIN)) Loading Loading @@ -1605,6 +1602,7 @@ static int ctl_ioctl(uint command, struct dm_ioctl __user *user) * Copy the parameters into kernel space. */ r = copy_params(user, ¶m); input_param_size = param->data_size; current->flags &= ~PF_MEMALLOC; Loading @@ -1615,9 +1613,8 @@ static int ctl_ioctl(uint command, struct dm_ioctl __user *user) if (r) goto out; param_size = param->data_size; param->data_size = sizeof(*param); r = fn(param, param_size); r = fn(param, input_param_size); /* * Copy the results back to userland. Loading @@ -1626,7 +1623,7 @@ static int ctl_ioctl(uint command, struct dm_ioctl __user *user) r = -EFAULT; out: free_params(param); vfree(param); return r; } Loading