diff options
author | Teodora Baluta <teobaluta@gmail.com> | 2013-10-29 00:09:18 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-10-29 08:40:53 -0700 |
commit | f0c80e4e1cd00dfaff98be961bcf28f504d628dc (patch) | |
tree | 92f0fc076195a61260c15f9d12f65db9e9194fdb | |
parent | 8cf9ff570b73273c6439ade681466c87199a8104 (diff) |
staging: comedi: use memdup_user to simplify code
Use memdup_user rather than duplicating implementation. Fix following
coccinelle warnings:
drivers/staging/comedi/comedi_fops.c:1425:5-12: WARNING opportunity for memdup_user
drivers/staging/comedi/comedi_fops.c:1553:6-13: WARNING opportunity for memdup_user
Signed-off-by: Teodora Baluta <teobaluta@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/staging/comedi/comedi_fops.c | 33 |
1 files changed, 10 insertions, 23 deletions
diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 721df313f8df..f3d59e2a1152 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -1421,17 +1421,11 @@ static int do_cmd_ioctl(struct comedi_device *dev, async->cmd = cmd; async->cmd.data = NULL; /* load channel/gain list */ - async->cmd.chanlist = - kmalloc(async->cmd.chanlist_len * sizeof(int), GFP_KERNEL); - if (!async->cmd.chanlist) { - DPRINTK("allocation failed\n"); - return -ENOMEM; - } - - if (copy_from_user(async->cmd.chanlist, user_chanlist, - async->cmd.chanlist_len * sizeof(int))) { - DPRINTK("fault reading chanlist\n"); - ret = -EFAULT; + async->cmd.chanlist = memdup_user(user_chanlist, + async->cmd.chanlist_len * sizeof(int)); + if (IS_ERR(async->cmd.chanlist)) { + ret = PTR_ERR(async->cmd.chanlist); + DPRINTK("memdup_user failed with code %d\n", ret); goto cleanup; } @@ -1549,18 +1543,11 @@ static int do_cmdtest_ioctl(struct comedi_device *dev, /* load channel/gain list */ if (cmd.chanlist) { - chanlist = - kmalloc(cmd.chanlist_len * sizeof(int), GFP_KERNEL); - if (!chanlist) { - DPRINTK("allocation failed\n"); - ret = -ENOMEM; - goto cleanup; - } - - if (copy_from_user(chanlist, user_chanlist, - cmd.chanlist_len * sizeof(int))) { - DPRINTK("fault reading chanlist\n"); - ret = -EFAULT; + chanlist = memdup_user(user_chanlist, + cmd.chanlist_len * sizeof(int)); + if (IS_ERR(chanlist)) { + ret = PTR_ERR(chanlist); + DPRINTK("memdup_user exited with code %d", ret); goto cleanup; } |