aboutsummaryrefslogtreecommitdiffstats
path: root/fs/cifs/cifsencrypt.c
diff options
context:
space:
mode:
authorSteve French <smfrench@us.ibm.com>2013-06-25 15:03:16 -0400
committerSteve French <smfrench@gmail.com>2013-06-26 18:31:45 -0400
commitfdf96a907c1fbb93c633e2b7ede3b8df26d6a4c0 (patch)
treec6941390435b58b2cb117fd1537d4d60bc6c5f47 /fs/cifs/cifsencrypt.c
parent2a2c41c07c710f2c1afe3748bdde40db9ea9d9e6 (diff)
Handle big endianness in NTLM (ntlmv2) authentication
This is RH bug 970891 Uppercasing of username during calculation of ntlmv2 hash fails because UniStrupr function does not handle big endian wchars. Also fix a comment in the same code to reflect its correct usage. [To make it easier for stable (rather than require 2nd patch) fixed this patch of Shirish's to remove endian warning generated by sparse -- steve f.] Reported-by: steve <sanpatr1@in.ibm.com> Signed-off-by: Shirish Pargaonkar <shirishpargaonkar@gmail.com> Cc: <stable@kernel.org> Reviewed-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve French <smfrench@gmail.com>
Diffstat (limited to 'fs/cifs/cifsencrypt.c')
-rw-r--r--fs/cifs/cifsencrypt.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/cifs/cifsencrypt.c b/fs/cifs/cifsencrypt.c
index 30bea6bd3023..330875948f18 100644
--- a/fs/cifs/cifsencrypt.c
+++ b/fs/cifs/cifsencrypt.c
@@ -413,7 +413,7 @@ static int calc_ntlmv2_hash(struct cifs_ses *ses, char *ntlmv2_hash,
413 int rc = 0; 413 int rc = 0;
414 int len; 414 int len;
415 char nt_hash[CIFS_NTHASH_SIZE]; 415 char nt_hash[CIFS_NTHASH_SIZE];
416 wchar_t *user; 416 __le16 *user;
417 wchar_t *domain; 417 wchar_t *domain;
418 wchar_t *server; 418 wchar_t *server;
419 419
@@ -438,7 +438,7 @@ static int calc_ntlmv2_hash(struct cifs_ses *ses, char *ntlmv2_hash,
438 return rc; 438 return rc;
439 } 439 }
440 440
441 /* convert ses->user_name to unicode and uppercase */ 441 /* convert ses->user_name to unicode */
442 len = ses->user_name ? strlen(ses->user_name) : 0; 442 len = ses->user_name ? strlen(ses->user_name) : 0;
443 user = kmalloc(2 + (len * 2), GFP_KERNEL); 443 user = kmalloc(2 + (len * 2), GFP_KERNEL);
444 if (user == NULL) { 444 if (user == NULL) {
@@ -447,7 +447,7 @@ static int calc_ntlmv2_hash(struct cifs_ses *ses, char *ntlmv2_hash,
447 } 447 }
448 448
449 if (len) { 449 if (len) {
450 len = cifs_strtoUTF16((__le16 *)user, ses->user_name, len, nls_cp); 450 len = cifs_strtoUTF16(user, ses->user_name, len, nls_cp);
451 UniStrupr(user); 451 UniStrupr(user);
452 } else { 452 } else {
453 memset(user, '\0', 2); 453 memset(user, '\0', 2);