Patch "cifs: dynamic allocation of ntlmssp blob" has been added to the 4.4-stable tree
This is a note to let you know that I've just added the patch titled
cifs: dynamic allocation of ntlmssp blob
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
cifs-dynamic-allocation-of-ntlmssp-blob.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
b8da344b74c822e966c6d19d6b2321efe82c5d97Mon Sep 17 00:00:00 2001
From: Jerome Marchand <[email protected]>
Date: Thu, 26 May 2016 11:52:25 +0200
Subject: cifs: dynamic allocation of ntlmssp blob
From: Jerome Marchand <[email protected]>
commit b8da344b74c822e966c6d19d6b2321efe82c5d97 upstream.
In sess_auth_rawntlmssp_authenticate(), the ntlmssp blob is allocated statically and its size is an "empirical" 5*sizeof(struct _AUTHENTICATE_MESSAGE) (320B on x86_64). I don't know where this value comes from or if it was ever appropriate, but it is currently
insufficient: the user and domain name in UTF16 could take 1kB by themselves. Because of that, build_ntlmssp_auth_blob() might corrupt memory (out-of-bounds write). The size of ntlmssp_blob in SMB2_sess_setup() is too small too (sizeof(struct _NEGOTIATE_MESSAGE)
+ 500).
This patch allocates the blob dynamically inbuild_ntlmssp_auth_blob().
--- fs/cifs/ntlmssp.h | 2 - fs/cifs/sess.c | 76 +++++++++++++++++++++++++++++------------------------- fs/cifs/smb2pdu.c | 10 +------ 3 files changed, 45 insertions(+), 43 deletions(-)
fs/cifs/ntlmssp.h +1 -1
@@ -133,6 +133,6 @@ typedef struct _AUTHENTICATE_MESSAGE {int decode_ntlmssp_challenge (char *bcc_ptr,int blob_len,struct cifs_ses *ses);void build_ntlmssp_negotiate_blob (unsigned char *pbuffer,struct cifs_ses *ses); -int build_ntlmssp_auth_blob (unsigned char *pbuffer,u16 *buflen, +int build_ntlmssp_auth_blob (unsigned char **pbuffer,u16 *buflen,struct cifs_ses *ses,const struct nls_table *nls_cp);
fs/cifs/sess.c +42 -34
160 lines not on this page · raw message
fs/cifs/smb2pdu.c +2 -8
@@ -591,7 +591,7 @@ SMB2_sess_setup(const unsigned int xid,u16 blob_length =0 ;struct key *spnego_key =NULL ;char *security_blob =NULL ; -char *ntlmssp_blob =NULL ; +unsigned char *ntlmssp_blob =NULL ;bool use_spnego = false;/* else use raw ntlmssp */ cifs_dbg (FYI ,"Session Setup\n" );
@@ -716,13 +716,7 @@ ssetup_ntlmssp_authenticate: iov[1 ].iov_len = blob_length; }else if (phase == NtLmAuthenticate) { req->hdr.SessionId = ses->Suid; - ntlmssp_blob =kzalloc (sizeof (struct _NEGOTIATE_MESSAGE ) +500 , -GFP_KERNEL ); -if (ntlmssp_blob ==NULL ) { - rc = -ENOMEM ; - goto ssetup_exit; - } - rc =build_ntlmssp_auth_blob (ntlmssp_blob, &blob_length, ses, + rc =build_ntlmssp_auth_blob (&ntlmssp_blob, &blob_length, ses, nls_cp);if (rc) { cifs_dbg(FYI, "build_ntlmssp_auth_blob failed %d\n",
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/cifs-dynamic-allocation-of-ntlmssp-blob.patch