CIFS: Use memdup_user() rather than duplicating its implementation
authorMarkus Elfring <elfring@users.sourceforge.net>
Tue, 5 Nov 2019 20:30:25 +0000 (21:30 +0100)
committerSteve French <stfrench@microsoft.com>
Mon, 25 Nov 2019 07:14:53 +0000 (01:14 -0600)
Reuse existing functionality from memdup_user() instead of keeping
duplicate source code.

Generated by: scripts/coccinelle/api/memdup_user.cocci

Fixes: f5b05d622a3e99e6a97a189fe500414be802a05c ("cifs: add IOCTL for QUERY_INFO passthrough to userspace")
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/smb2ops.c

index cd55af9..e31cdd4 100644 (file)
@@ -1402,15 +1402,10 @@ smb2_ioctl_query_info(const unsigned int xid,
        if (smb3_encryption_required(tcon))
                flags |= CIFS_TRANSFORM_REQ;
 
-       buffer = kmalloc(qi.output_buffer_length, GFP_KERNEL);
-       if (buffer == NULL)
-               return -ENOMEM;
-
-       if (copy_from_user(buffer, arg + sizeof(struct smb_query_info),
-                          qi.output_buffer_length)) {
-               rc = -EFAULT;
-               goto iqinf_exit;
-       }
+       buffer = memdup_user(arg + sizeof(struct smb_query_info),
+                            qi.output_buffer_length);
+       if (IS_ERR(buffer))
+               return PTR_ERR(buffer);
 
        /* Open */
        memset(&open_iov, 0, sizeof(open_iov));