lkml.org 
[lkml]   [2020]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 624/717] SMB3.1.1: remove confusing mount warning when no SPNEGO info on negprot rsp
    Date
    From: Steve French <stfrench@microsoft.com>

    commit bc7c4129d4cdc56d1b5477c1714246f27df914dd upstream.

    Azure does not send an SPNEGO blob in the negotiate protocol response,
    so we shouldn't assume that it is there when validating the location
    of the first negotiate context. This avoids the potential confusing
    mount warning:

    CIFS: Invalid negotiate context offset

    CC: Stable <stable@vger.kernel.org>
    Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/cifs/smb2misc.c | 16 ++++++++++++----
    1 file changed, 12 insertions(+), 4 deletions(-)

    --- a/fs/cifs/smb2misc.c
    +++ b/fs/cifs/smb2misc.c
    @@ -94,6 +94,8 @@ static const __le16 smb2_rsp_struct_size
    /* SMB2_OPLOCK_BREAK */ cpu_to_le16(24)
    };

    +#define SMB311_NEGPROT_BASE_SIZE (sizeof(struct smb2_sync_hdr) + sizeof(struct smb2_negotiate_rsp))
    +
    static __u32 get_neg_ctxt_len(struct smb2_sync_hdr *hdr, __u32 len,
    __u32 non_ctxlen)
    {
    @@ -109,11 +111,17 @@ static __u32 get_neg_ctxt_len(struct smb

    /* Make sure that negotiate contexts start after gss security blob */
    nc_offset = le32_to_cpu(pneg_rsp->NegotiateContextOffset);
    - if (nc_offset < non_ctxlen) {
    - pr_warn_once("Invalid negotiate context offset\n");
    + if (nc_offset + 1 < non_ctxlen) {
    + pr_warn_once("Invalid negotiate context offset %d\n", nc_offset);
    return 0;
    - }
    - size_of_pad_before_neg_ctxts = nc_offset - non_ctxlen;
    + } else if (nc_offset + 1 == non_ctxlen) {
    + cifs_dbg(FYI, "no SPNEGO security blob in negprot rsp\n");
    + size_of_pad_before_neg_ctxts = 0;
    + } else if (non_ctxlen == SMB311_NEGPROT_BASE_SIZE)
    + /* has padding, but no SPNEGO blob */
    + size_of_pad_before_neg_ctxts = nc_offset - non_ctxlen + 1;
    + else
    + size_of_pad_before_neg_ctxts = nc_offset - non_ctxlen;

    /* Verify that at least minimal negotiate contexts fit within frame */
    if (len < nc_offset + (neg_count * sizeof(struct smb2_neg_context))) {

    \
     
     \ /
      Last update: 2020-12-28 15:29    [W:3.222 / U:0.632 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site