• J
    cifs: fix unicode string area word alignment in session setup · 27b87fe5
    Jeff Layton 提交于
    The handling of unicode string area alignment is wrong.
    decode_unicode_ssetup improperly assumes that it will always be preceded
    by a pad byte. This isn't the case if the string area is already
    word-aligned.
    
    This problem, combined with the bad buffer sizing for the serverDomain
    string can cause memory corruption. The bad alignment can make it so
    that the alignment of the characters is off. This can make them
    translate to characters that are greater than 2 bytes each. If this
    happens we can overflow the allocation.
    
    Fix this by fixing the alignment in CIFS_SessSetup instead so we can
    verify it against the head of the response. Also, clean up the
    workaround for improperly terminated strings by checking for a
    odd-length unicode buffers and then forcibly terminating them.
    
    Finally, resize the buffer for serverDomain. Now that we've fixed
    the alignment, it's probably fine, but a malicious server could
    overflow it.
    
    A better solution for handling these strings is still needed, but
    this should be a suitable bandaid.
    Signed-off-by: NJeff Layton <jlayton@redhat.com>
    CC: Stable <stable@vger.kernel.org>
    Signed-off-by: NSteve French <sfrench@us.ibm.com>
    27b87fe5
sess.c 20.9 KB