]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
CIFS: Use common error handling code in smb2_ioctl_query_info()
authorMarkus Elfring <elfring@users.sourceforge.net>
Tue, 5 Nov 2019 21:26:53 +0000 (22:26 +0100)
committerSteve French <stfrench@microsoft.com>
Mon, 25 Nov 2019 07:14:53 +0000 (01:14 -0600)
Move the same error code assignments so that such exception handling
can be better reused at the end of this function.

This issue was detected by using the Coccinelle software.

Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/smb2ops.c

index e31cdd493e1b10f04a6d47f6c07bb6180cb22731..f28d4207bbdaaa8bd8c2532b9e1430c19ab43e6d 100644 (file)
@@ -1524,35 +1524,32 @@ smb2_ioctl_query_info(const unsigned int xid,
                if (le32_to_cpu(io_rsp->OutputCount) < qi.input_buffer_length)
                        qi.input_buffer_length = le32_to_cpu(io_rsp->OutputCount);
                if (qi.input_buffer_length > 0 &&
-                   le32_to_cpu(io_rsp->OutputOffset) + qi.input_buffer_length > rsp_iov[1].iov_len) {
-                       rc = -EFAULT;
-                       goto iqinf_exit;
-               }
-               if (copy_to_user(&pqi->input_buffer_length, &qi.input_buffer_length,
-                                sizeof(qi.input_buffer_length))) {
-                       rc = -EFAULT;
-                       goto iqinf_exit;
-               }
+                   le32_to_cpu(io_rsp->OutputOffset) + qi.input_buffer_length
+                   > rsp_iov[1].iov_len)
+                       goto e_fault;
+
+               if (copy_to_user(&pqi->input_buffer_length,
+                                &qi.input_buffer_length,
+                                sizeof(qi.input_buffer_length)))
+                       goto e_fault;
+
                if (copy_to_user((void __user *)pqi + sizeof(struct smb_query_info),
                                 (const void *)io_rsp + le32_to_cpu(io_rsp->OutputOffset),
-                                qi.input_buffer_length)) {
-                       rc = -EFAULT;
-                       goto iqinf_exit;
-               }
+                                qi.input_buffer_length))
+                       goto e_fault;
        } else {
                pqi = (struct smb_query_info __user *)arg;
                qi_rsp = (struct smb2_query_info_rsp *)rsp_iov[1].iov_base;
                if (le32_to_cpu(qi_rsp->OutputBufferLength) < qi.input_buffer_length)
                        qi.input_buffer_length = le32_to_cpu(qi_rsp->OutputBufferLength);
-               if (copy_to_user(&pqi->input_buffer_length, &qi.input_buffer_length,
-                                sizeof(qi.input_buffer_length))) {
-                       rc = -EFAULT;
-                       goto iqinf_exit;
-               }
-               if (copy_to_user(pqi + 1, qi_rsp->Buffer, qi.input_buffer_length)) {
-                       rc = -EFAULT;
-                       goto iqinf_exit;
-               }
+               if (copy_to_user(&pqi->input_buffer_length,
+                                &qi.input_buffer_length,
+                                sizeof(qi.input_buffer_length)))
+                       goto e_fault;
+
+               if (copy_to_user(pqi + 1, qi_rsp->Buffer,
+                                qi.input_buffer_length))
+                       goto e_fault;
        }
 
  iqinf_exit:
@@ -1568,6 +1565,10 @@ smb2_ioctl_query_info(const unsigned int xid,
        free_rsp_buf(resp_buftype[1], rsp_iov[1].iov_base);
        free_rsp_buf(resp_buftype[2], rsp_iov[2].iov_base);
        return rc;
+
+e_fault:
+       rc = -EFAULT;
+       goto iqinf_exit;
 }
 
 static ssize_t