staging/easycap: Use memdup_user
PATCH 1/1 staging/easycap: Use memdup_user
From: Thomas Meyer <[email protected]>
Use kmemdup_user rather than duplicating its implementation This is a little bit restricted to reduce false positives
The semantic patch that makes this output is available in scripts/coccinelle/api/memdup_user.cocci.
More information about semantic patching is available at
http://coccinelle.lip6.fr/
Signed-off-by Thomas Meyer <[email protected]>
---
drivers/staging/easycap/easycap_ioctl.c +10 -20
@@ -1317,17 +1317,12 @@ long easycap_unlocked_ioctl(struct file *file,struct v4l2_control *pv4l2_control;JOM (8 ,"VIDIOC_G_CTRL\n" ); - pv4l2_control =kzalloc (sizeof (struct v4l2_control ),GFP_KERNEL ); -if (!pv4l2_control) { -SAM ("ERROR: out of memory\n" ); + pv4l2_control =memdup_user ((void __user *)arg, +sizeof (struct v4l2_control )); +if (IS_ERR (pv4l2_control)) { +SAM ("ERROR: copy from user failed\n" );mutex_unlock (&easycapdc60_dongle[kd].mutex_video); -return -ENOMEM ; - } -if (0 !=copy_from_user (pv4l2_control, (void __user *)arg, -sizeof (struct v4l2_control ))) { -kfree (pv4l2_control); -mutex_unlock (&easycapdc60_dongle[kd].mutex_video); -return -EFAULT ; +return PTR_ERR (pv4l2_control); }switch (pv4l2_control->id) {
@@ -2356,17 +2351,12 @@ long easycap_unlocked_ioctl(struct file *file,struct v4l2_streamparm *pv4l2_streamparm;JOM (8 ,"VIDIOC_G_PARM\n" ); - pv4l2_streamparm =kzalloc (sizeof (struct v4l2_streamparm ),GFP_KERNEL ); -if (!pv4l2_streamparm) { -SAM ("ERROR: out of memory\n" ); -mutex_unlock (&easycapdc60_dongle[kd].mutex_video); -return -ENOMEM ; - } -if (copy_from_user (pv4l2_streamparm, - (void __user *)arg,sizeof (struct v4l2_streamparm ))) { -kfree (pv4l2_streamparm); + pv4l2_streamparm =memdup_user ((void __user *)arg, +sizeof (struct v4l2_streamparm )); +if (IS_ERR (pv4l2_streamparm)) { +SAM ("ERROR: copy from user failed\n" );mutex_unlock (&easycapdc60_dongle[kd].mutex_video); -return -EFAULT ; +return PTR_ERR (pv4l2_streamparm); }if (pv4l2_streamparm->type !=V4L2_BUF_TYPE_VIDEO_CAPTURE ) {