To remove endian warning on build, I added this (might be easier to merge the patches) diff --git a/fs/cifs/cifs_unicode.h b/fs/cifs/cifs_unicode.h index bec1137..fe8d627 100644 --- a/fs/cifs/cifs_unicode.h +++ b/fs/cifs/cifs_unicode.h @@ -327,10 +327,10 @@ UniToupper(register wchar_t uc) /* * UniStrupr: Upper case a unicode string */ -static inline wchar_t * -UniStrupr(register wchar_t *upin) +static inline __le16 * +UniStrupr(register __le16 *upin) { - register wchar_t *up; + register __le16 *up; up = upin; while (*up) { /* For all characters */ diff --git a/fs/cifs/cifsencrypt.c b/fs/cifs/cifsencrypt.c index 5c89f37..3308759 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, int rc = 0; int len; char nt_hash[CIFS_NTHASH_SIZE]; - wchar_t *user; + __le16 *user; wchar_t *domain; wchar_t *server; @@ -447,7 +447,7 @@ static int calc_ntlmv2_hash(struct cifs_ses *ses, char *ntlmv2_hash, } if (len) { - len = cifs_strtoUTF16((__le16 *)user, ses->user_name, len, nls_cp); + len = cifs_strtoUTF16(user, ses->user_name, len, nls_cp); UniStrupr(user); } else { memset(user, '\0', 2); On Tue, Jun 25, 2013 at 12:49 PM, Jeff Layton <jlayton@xxxxxxxxxx> wrote: > On Tue, 25 Jun 2013 10:44:37 -0500b > shirishpargaonkar@xxxxxxxxx wrote: > >> From: Shirish Pargaonkar <shirishpargaonkar@xxxxxxxxx> >> >> >> 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. >> >> >> Reported-by: steve <sanpatr1@xxxxxxxxxx> >> Signed-off-by: Shirish Pargaonkar <shirishpargaonkar@xxxxxxxxx> >> Cc: <stable@xxxxxxxxxx> >> --- >> fs/cifs/cifs_unicode.h | 2 +- >> fs/cifs/cifsencrypt.c | 2 +- >> 2 files changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/fs/cifs/cifs_unicode.h b/fs/cifs/cifs_unicode.h >> index 4fb0974..bec1137 100644 >> --- a/fs/cifs/cifs_unicode.h >> +++ b/fs/cifs/cifs_unicode.h >> @@ -334,7 +334,7 @@ UniStrupr(register wchar_t *upin) >> >> up = upin; >> while (*up) { /* For all characters */ >> - *up = UniToupper(*up); >> + *up = cpu_to_le16(UniToupper(le16_to_cpu(*up))); >> up++; >> } >> return upin; /* Return input pointer */ >> diff --git a/fs/cifs/cifsencrypt.c b/fs/cifs/cifsencrypt.c >> index 71436d1..8b34a73 100644 >> --- a/fs/cifs/cifsencrypt.c >> +++ b/fs/cifs/cifsencrypt.c >> @@ -439,7 +439,7 @@ static int calc_ntlmv2_hash(struct cifs_ses *ses, char *ntlmv2_hash, >> return rc; >> } >> >> - /* convert ses->user_name to unicode and uppercase */ >> + /* convert ses->user_name to unicode */ >> len = ses->user_name ? strlen(ses->user_name) : 0; >> user = kmalloc(2 + (len * 2), GFP_KERNEL); >> if (user == NULL) { > > Looks correct. Nice work tracking that down! > > Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx> -- Thanks, Steve -- To unsubscribe from this list: send the line "unsubscribe linux-cifs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html