aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Layton <jlayton@redhat.com>2009-04-16 11:21:52 -0400
committerSteve French <sfrench@us.ibm.com>2009-04-16 21:26:50 -0400
commitf083def68f84b04fe3f97312498911afce79609e (patch)
treef7550b49ad4b364f542dd1afe1bd2736fd34485f
parent27b87fe52baba0a55e9723030e76fce94fabcea4 (diff)
cifs: fix buffer size for tcon->nativeFileSystem field
The buffer for this was resized recently to fix a bug. It's still possible however that a malicious server could overflow this field by sending characters in it that are >2 bytes in the local charset. Double the size of the buffer to account for this possibility. Also get rid of some really strange and seemingly pointless NULL termination. It's NULL terminating the string in the source buffer, but by the time that happens, we've already copied the string. Signed-off-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve French <sfrench@us.ibm.com>
-rw-r--r--fs/cifs/connect.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index 01e280cab06..1a93604d98f 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -3756,16 +3756,13 @@ CIFSTCon(unsigned int xid, struct cifsSesInfo *ses,
3756 BCC(smb_buffer_response)) { 3756 BCC(smb_buffer_response)) {
3757 kfree(tcon->nativeFileSystem); 3757 kfree(tcon->nativeFileSystem);
3758 tcon->nativeFileSystem = 3758 tcon->nativeFileSystem =
3759 kzalloc(2*(length + 1), GFP_KERNEL); 3759 kzalloc((4 * length) + 2, GFP_KERNEL);
3760 if (tcon->nativeFileSystem) 3760 if (tcon->nativeFileSystem)
3761 cifs_strfromUCS_le( 3761 cifs_strfromUCS_le(
3762 tcon->nativeFileSystem, 3762 tcon->nativeFileSystem,
3763 (__le16 *) bcc_ptr, 3763 (__le16 *) bcc_ptr,
3764 length, nls_codepage); 3764 length, nls_codepage);
3765 bcc_ptr += 2 * length; 3765 bcc_ptr += (2 * length) + 2;
3766 bcc_ptr[0] = 0; /* null terminate the string */
3767 bcc_ptr[1] = 0;
3768 bcc_ptr += 2;
3769 } 3766 }
3770 /* else do not bother copying these information fields*/ 3767 /* else do not bother copying these information fields*/
3771 } else { 3768 } else {