lkml.org 
[lkml]   [2013]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[ 38/38] Handle big endianness in NTLM (ntlmv2) authentication
    Date
    3.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Steve French <smfrench@us.ibm.com>

    commit fdf96a907c1fbb93c633e2b7ede3b8df26d6a4c0 upstream.

    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>
    Reviewed-by: Jeff Layton <jlayton@redhat.com>
    Signed-off-by: Steve French <smfrench@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/cifs/cifs_unicode.h | 8 ++++----
    fs/cifs/cifsencrypt.c | 6 +++---
    2 files changed, 7 insertions(+), 7 deletions(-)

    --- a/fs/cifs/cifs_unicode.h
    +++ b/fs/cifs/cifs_unicode.h
    @@ -327,14 +327,14 @@ 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 */
    - *up = UniToupper(*up);
    + *up = cpu_to_le16(UniToupper(le16_to_cpu(*up)));
    up++;
    }
    return upin; /* Return input pointer */
    --- a/fs/cifs/cifsencrypt.c
    +++ b/fs/cifs/cifsencrypt.c
    @@ -415,7 +415,7 @@ static int calc_ntlmv2_hash(struct cifs_
    int rc = 0;
    int len;
    char nt_hash[CIFS_NTHASH_SIZE];
    - wchar_t *user;
    + __le16 *user;
    wchar_t *domain;
    wchar_t *server;

    @@ -440,7 +440,7 @@ static int calc_ntlmv2_hash(struct cifs_
    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) {
    @@ -450,7 +450,7 @@ static int calc_ntlmv2_hash(struct cifs_
    }

    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);



    \
     
     \ /
      Last update: 2013-07-19 08:21    [W:4.299 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site