Commit fb660928 authored by Markus Elfring's avatar Markus Elfring Committed by Mauro Carvalho Chehab

[media] dvb_frontend: Use memdup_user() rather than duplicating its implementation

* Reuse existing functionality from memdup_user() instead of keeping
  duplicate source code.

  This issue was detected by using the Coccinelle software.

* Return directly if this copy operation failed.

* Replace the specification of data structures by pointer dereferences
  to make the corresponding size determination a bit safer according to
  the Linux coding style convention.
Signed-off-by: default avatarMarkus Elfring <elfring@users.sourceforge.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 8eb14e80
...@@ -1969,17 +1969,9 @@ static int dvb_frontend_ioctl_properties(struct file *file, ...@@ -1969,17 +1969,9 @@ static int dvb_frontend_ioctl_properties(struct file *file,
if ((tvps->num == 0) || (tvps->num > DTV_IOCTL_MAX_MSGS)) if ((tvps->num == 0) || (tvps->num > DTV_IOCTL_MAX_MSGS))
return -EINVAL; return -EINVAL;
tvp = kmalloc(tvps->num * sizeof(struct dtv_property), GFP_KERNEL); tvp = memdup_user(tvps->props, tvps->num * sizeof(*tvp));
if (!tvp) { if (IS_ERR(tvp))
err = -ENOMEM; return PTR_ERR(tvp);
goto out;
}
if (copy_from_user(tvp, (void __user *)tvps->props,
tvps->num * sizeof(struct dtv_property))) {
err = -EFAULT;
goto out;
}
for (i = 0; i < tvps->num; i++) { for (i = 0; i < tvps->num; i++) {
err = dtv_property_process_set(fe, tvp + i, file); err = dtv_property_process_set(fe, tvp + i, file);
...@@ -2002,17 +1994,9 @@ static int dvb_frontend_ioctl_properties(struct file *file, ...@@ -2002,17 +1994,9 @@ static int dvb_frontend_ioctl_properties(struct file *file,
if ((tvps->num == 0) || (tvps->num > DTV_IOCTL_MAX_MSGS)) if ((tvps->num == 0) || (tvps->num > DTV_IOCTL_MAX_MSGS))
return -EINVAL; return -EINVAL;
tvp = kmalloc(tvps->num * sizeof(struct dtv_property), GFP_KERNEL); tvp = memdup_user(tvps->props, tvps->num * sizeof(*tvp));
if (!tvp) { if (IS_ERR(tvp))
err = -ENOMEM; return PTR_ERR(tvp);
goto out;
}
if (copy_from_user(tvp, (void __user *)tvps->props,
tvps->num * sizeof(struct dtv_property))) {
err = -EFAULT;
goto out;
}
/* /*
* Let's use our own copy of property cache, in order to * Let's use our own copy of property cache, in order to
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment