Message ID | 1443793229-22363-2-git-send-email-javier@osg.samsung.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
On Fri, Oct 02, 2015 at 03:40:12PM +0200, Javier Martinez Canillas wrote: > The memdup_user() helper function can be used to duplicate a memory region > from user-space to kernel-space. There is no need to open code the same > logic using kmalloc() and copy_from_user() instead. This was found with > make coccicheck that reported the following warning: > > drivers/input/joydev.c:447:10-17: WARNING opportunity for memdup_user > drivers/input/joydev.c:483:10-17: WARNING opportunity for memdup_user > > Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com> Applied, thank you. > --- > > drivers/input/joydev.c | 18 ++++++------------ > 1 file changed, 6 insertions(+), 12 deletions(-) > > diff --git a/drivers/input/joydev.c b/drivers/input/joydev.c > index 6cb5a3e5f9a1..e3dcd4abae18 100644 > --- a/drivers/input/joydev.c > +++ b/drivers/input/joydev.c > @@ -444,12 +444,9 @@ static int joydev_handle_JSIOCSAXMAP(struct joydev *joydev, > len = min(len, sizeof(joydev->abspam)); > > /* Validate the map. */ > - abspam = kmalloc(len, GFP_KERNEL); > - if (!abspam) > - return -ENOMEM; > - > - if (copy_from_user(abspam, argp, len)) { > - retval = -EFAULT; > + abspam = memdup_user(argp, len); > + if (IS_ERR(abspam)) { > + retval = PTR_ERR(abspam); > goto out; > } > > @@ -480,12 +477,9 @@ static int joydev_handle_JSIOCSBTNMAP(struct joydev *joydev, > len = min(len, sizeof(joydev->keypam)); > > /* Validate the map. */ > - keypam = kmalloc(len, GFP_KERNEL); > - if (!keypam) > - return -ENOMEM; > - > - if (copy_from_user(keypam, argp, len)) { > - retval = -EFAULT; > + keypam = memdup_user(argp, len); > + if (IS_ERR(keypam)) { > + retval = PTR_ERR(keypam); > goto out; > } > > -- > 2.4.3 >
diff --git a/drivers/input/joydev.c b/drivers/input/joydev.c index 6cb5a3e5f9a1..e3dcd4abae18 100644 --- a/drivers/input/joydev.c +++ b/drivers/input/joydev.c @@ -444,12 +444,9 @@ static int joydev_handle_JSIOCSAXMAP(struct joydev *joydev, len = min(len, sizeof(joydev->abspam)); /* Validate the map. */ - abspam = kmalloc(len, GFP_KERNEL); - if (!abspam) - return -ENOMEM; - - if (copy_from_user(abspam, argp, len)) { - retval = -EFAULT; + abspam = memdup_user(argp, len); + if (IS_ERR(abspam)) { + retval = PTR_ERR(abspam); goto out; } @@ -480,12 +477,9 @@ static int joydev_handle_JSIOCSBTNMAP(struct joydev *joydev, len = min(len, sizeof(joydev->keypam)); /* Validate the map. */ - keypam = kmalloc(len, GFP_KERNEL); - if (!keypam) - return -ENOMEM; - - if (copy_from_user(keypam, argp, len)) { - retval = -EFAULT; + keypam = memdup_user(argp, len); + if (IS_ERR(keypam)) { + retval = PTR_ERR(keypam); goto out; }
The memdup_user() helper function can be used to duplicate a memory region from user-space to kernel-space. There is no need to open code the same logic using kmalloc() and copy_from_user() instead. This was found with make coccicheck that reported the following warning: drivers/input/joydev.c:447:10-17: WARNING opportunity for memdup_user drivers/input/joydev.c:483:10-17: WARNING opportunity for memdup_user Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com> --- drivers/input/joydev.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-)