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 <[email protected]> wrote:
> On Tue, 25 Jun 2013 10:44:37 -0500b
> [email protected] wrote:
>
>> From: Shirish Pargaonkar <[email protected]>
>>
>>
>> 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 <[email protected]>
>> Signed-off-by: Shirish Pargaonkar <[email protected]>
>> Cc: <[email protected]>
>> ---
>> 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 <[email protected]>
--
Thanks,
Steve
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html