cifs: Add client version details to NTLM authenticate message
authorMeetakshi Setiya <msetiya@microsoft.com>
Wed, 4 Oct 2023 11:17:55 +0000 (07:17 -0400)
committerSteve French <stfrench@microsoft.com>
Mon, 23 Oct 2023 00:03:42 +0000 (19:03 -0500)
The NTLM authenticate message currently sets the NTLMSSP_NEGOTIATE_VERSION
flag but does not populate the VERSION structure. This commit fixes this
bug by ensuring that the flag is set and the version details are included
in the message.

Signed-off-by: Meetakshi Setiya <msetiya@microsoft.com>
Reviewed-by: Bharath SM <bharathsm@microsoft.com>
Reviewed-by: Paulo Alcantara (SUSE) <pc@manguebit.com>
Reviewed-by: Shyam Prasad N <sprasad@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/ntlmssp.h
fs/smb/client/sess.c

index 2c5dde2ece588ac0b6b41dec38fdebf3873faf83..875de43b72de3e7337501ca910cc63675d0cfedd 100644 (file)
@@ -133,8 +133,8 @@ typedef struct _AUTHENTICATE_MESSAGE {
        SECURITY_BUFFER WorkstationName;
        SECURITY_BUFFER SessionKey;
        __le32 NegotiateFlags;
-       /* SECURITY_BUFFER for version info not present since we
-          do not set the version is present flag */
+       struct  ntlmssp_version Version;
+       /* SECURITY_BUFFER */
        char UserString[];
 } __attribute__((packed)) AUTHENTICATE_MESSAGE, *PAUTHENTICATE_MESSAGE;
 
index 79f26c560edf89691499a086a8c23f576c936b71..919ace2d13d420337c4cce0caa6693f20dd81db8 100644 (file)
@@ -1060,10 +1060,16 @@ int build_ntlmssp_auth_blob(unsigned char **pbuffer,
        memcpy(sec_blob->Signature, NTLMSSP_SIGNATURE, 8);
        sec_blob->MessageType = NtLmAuthenticate;
 
+       /* send version information in ntlmssp authenticate also */
        flags = ses->ntlmssp->server_flags | NTLMSSP_REQUEST_TARGET |
-               NTLMSSP_NEGOTIATE_TARGET_INFO | NTLMSSP_NEGOTIATE_WORKSTATION_SUPPLIED;
-       /* we only send version information in ntlmssp negotiate, so do not set this flag */
-       flags = flags & ~NTLMSSP_NEGOTIATE_VERSION;
+               NTLMSSP_NEGOTIATE_TARGET_INFO | NTLMSSP_NEGOTIATE_VERSION |
+               NTLMSSP_NEGOTIATE_WORKSTATION_SUPPLIED;
+
+       sec_blob->Version.ProductMajorVersion = LINUX_VERSION_MAJOR;
+       sec_blob->Version.ProductMinorVersion = LINUX_VERSION_PATCHLEVEL;
+       sec_blob->Version.ProductBuild = cpu_to_le16(SMB3_PRODUCT_BUILD);
+       sec_blob->Version.NTLMRevisionCurrent = NTLMSSP_REVISION_W2K3;
+
        tmp = *pbuffer + sizeof(AUTHENTICATE_MESSAGE);
        sec_blob->NegotiateFlags = cpu_to_le32(flags);