cifs: remove unneeded 2bytes of padding from smb2 tree connect
authorNamjae Jeon <linkinjeon@kernel.org>
Wed, 8 Feb 2023 09:34:37 +0000 (18:34 +0900)
committerSteve French <stfrench@microsoft.com>
Mon, 20 Feb 2023 17:48:48 +0000 (11:48 -0600)
Due to the 2bytes of padding from the smb2 tree connect request,
there is an unneeded difference between the rfc1002 length and the actual
frame length. In the case of windows client, it is sent by matching it
exactly.

Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/smb2pdu.c

index c5cb2639b3f19b688214569c81b16c8c3b204c32..b16b41d3556018572737a1b308db3ba0bb01c8e9 100644 (file)
@@ -1867,12 +1867,12 @@ SMB2_tcon(const unsigned int xid, struct cifs_ses *ses, const char *tree,
        if (unc_path == NULL)
                return -ENOMEM;
 
-       unc_path_len = cifs_strtoUTF16(unc_path, tree, strlen(tree), cp) + 1;
-       unc_path_len *= 2;
-       if (unc_path_len < 2) {
+       unc_path_len = cifs_strtoUTF16(unc_path, tree, strlen(tree), cp);
+       if (unc_path_len <= 0) {
                kfree(unc_path);
                return -EINVAL;
        }
+       unc_path_len *= 2;
 
        /* SMB2 TREE_CONNECT request must be called with TreeId == 0 */
        tcon->tid = 0;
@@ -1894,7 +1894,7 @@ SMB2_tcon(const unsigned int xid, struct cifs_ses *ses, const char *tree,
        /* Testing shows that buffer offset must be at location of Buffer[0] */
        req->PathOffset = cpu_to_le16(sizeof(struct smb2_tree_connect_req)
                        - 1 /* pad */);
-       req->PathLength = cpu_to_le16(unc_path_len - 2);
+       req->PathLength = cpu_to_le16(unc_path_len);
        iov[1].iov_base = unc_path;
        iov[1].iov_len = unc_path_len;