]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
comedi: Replace kcalloc + copy_from_user with memdup_array_user
authorThorsten Blum <thorsten.blum@linux.dev>
Wed, 17 Sep 2025 13:13:47 +0000 (15:13 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Oct 2025 05:54:41 +0000 (07:54 +0200)
Replace kcalloc() followed by copy_from_user() with memdup_array_user()
to improve and simplify comedi_unlocked_ioctl().

No functional changes intended.

Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
Link: https://patch.msgid.link/20250917131349.117642-2-thorsten.blum@linux.dev
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/comedi/comedi_fops.c

index 7e2f2b1a1c362e9f3394ce08471e2caea8837779..dea698e509b1b0eafc65a866b75ba8e29069f172 100644 (file)
@@ -2284,15 +2284,10 @@ static long comedi_unlocked_ioctl(struct file *file, unsigned int cmd,
                rc = check_insnlist_len(dev, insnlist.n_insns);
                if (rc)
                        break;
-               insns = kcalloc(insnlist.n_insns, sizeof(*insns), GFP_KERNEL);
-               if (!insns) {
-                       rc = -ENOMEM;
-                       break;
-               }
-               if (copy_from_user(insns, insnlist.insns,
-                                  sizeof(*insns) * insnlist.n_insns)) {
-                       rc = -EFAULT;
-                       kfree(insns);
+               insns = memdup_array_user(insnlist.insns, insnlist.n_insns,
+                                         sizeof(*insns));
+               if (IS_ERR(insns)) {
+                       rc = PTR_ERR(insns);
                        break;
                }
                rc = do_insnlist_ioctl(dev, insns, insnlist.n_insns, file);