]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
cifs: Fix buffer size for tcon->nativeFileSystem field
authorJeff Layton <jlayton@redhat.com>
Sat, 9 May 2009 05:49:05 +0000 (11:19 +0530)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 18 May 2009 23:34:56 +0000 (16:34 -0700)
Commit f083def68f84b04fe3f97312498911afce79609e refreshed.

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>
Cc: Suresh Jayaraman <sjayaraman@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
fs/cifs/connect.c

index 4b64f39a85da48a3b8a81f271a5a56475561aa2b..0344b262a19290a38047835e089a3b03f280c415 100644 (file)
@@ -3667,16 +3667,12 @@ CIFSTCon(unsigned int xid, struct cifsSesInfo *ses,
                            BCC(smb_buffer_response)) {
                                kfree(tcon->nativeFileSystem);
                                tcon->nativeFileSystem =
-                                   kzalloc(2*(length + 1), GFP_KERNEL);
+                                   kzalloc((4 * length) + 2, GFP_KERNEL);
                                if (tcon->nativeFileSystem)
                                        cifs_strfromUCS_le(
                                                tcon->nativeFileSystem,
                                                (__le16 *) bcc_ptr,
                                                length, nls_codepage);
-                               bcc_ptr += 2 * length;
-                               bcc_ptr[0] = 0; /* null terminate the string */
-                               bcc_ptr[1] = 0;
-                               bcc_ptr += 2;
                        }
                        /* else do not bother copying these information fields*/
                } else {