• Gustavo A. R. Silva's avatar
    smb3: Fix out-of-bounds bug in SMB2_negotiate() · 8d8d1dbe
    Gustavo A. R. Silva authored
    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: default avatarGustavo A. R. Silva <gustavoars@kernel.org>
    Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
    8d8d1dbe
smb2pdu.h 53.8 KB