• G
    smb3: Fix out-of-bounds bug in SMB2_negotiate() · 01e00c89
    Gustavo A. R. Silva 提交于
    stable inclusion
    from linux-4.19.175
    commit 8c323163303d9923927c176977abdbe998f217ff
    
    --------------------------------
    
    commit 8d8d1dbe upstream.
    
    While addressing some warnings generated by -Warray-bounds, I found this
    bug that was introduced back in 2017:
    
      CC [M]  fs/cifs/smb2pdu.o
    fs/cifs/smb2pdu.c: In function ‘SMB2_negotiate’:
    fs/cifs/smb2pdu.c:822:16: warning: array subscript 1 is above array bounds
    of ‘__le16[1]’ {aka ‘short unsigned int[1]’} [-Warray-bounds]
      822 |   req->Dialects[1] = cpu_to_le16(SMB30_PROT_ID);
          |   ~~~~~~~~~~~~~^~~
    fs/cifs/smb2pdu.c:823:16: warning: array subscript 2 is above array bounds
    of ‘__le16[1]’ {aka ‘short unsigned int[1]’} [-Warray-bounds]
      823 |   req->Dialects[2] = cpu_to_le16(SMB302_PROT_ID);
          |   ~~~~~~~~~~~~~^~~
    fs/cifs/smb2pdu.c:824:16: warning: array subscript 3 is above array bounds
    of ‘__le16[1]’ {aka ‘short unsigned int[1]’} [-Warray-bounds]
      824 |   req->Dialects[3] = cpu_to_le16(SMB311_PROT_ID);
          |   ~~~~~~~~~~~~~^~~
    fs/cifs/smb2pdu.c:816:16: warning: array subscript 1 is above array bounds
    of ‘__le16[1]’ {aka ‘short unsigned int[1]’} [-Warray-bounds]
      816 |   req->Dialects[1] = cpu_to_le16(SMB302_PROT_ID);
          |   ~~~~~~~~~~~~~^~~
    
    At the time, the size of array _Dialects_ was changed from 1 to 3 in struct
    validate_negotiate_info_req, and then in 2019 it was changed from 3 to 4,
    but those changes were never made in struct smb2_negotiate_req, which has
    led to a 3 and a half years old out-of-bounds bug in function
    SMB2_negotiate() (fs/cifs/smb2pdu.c).
    
    Fix this by increasing the size of array _Dialects_ in struct
    smb2_negotiate_req to 4.
    
    Fixes: 9764c02f ("SMB3: Add support for multidialect negotiate (SMB2.1 and later)")
    Fixes: d5c7076b ("smb3: add smb3.1.1 to default dialect list")
    Cc: stable@vger.kernel.org
    Signed-off-by: NGustavo A. R. Silva <gustavoars@kernel.org>
    Signed-off-by: NSteve French <stfrench@microsoft.com>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    Signed-off-by: NCheng Jian <cj.chengjian@huawei.com>
    01e00c89
smb2pdu.h 42.2 KB