@@ -241,7 +241,7 @@ smb2_check_message(char *buf, unsigned int len, struct TCP_Server_Info *srvr)
* Some windows servers (win2016) will pad also the final
* PDU in a compound to 8 bytes.
*/
- if (((clc_len + 7) & ~7) == len)
+ if (roundup(clc_len, 8) == len)
return 0;
/*
@@ -3104,7 +3104,12 @@ receive_encrypted_standard(struct TCP_Server_Info *server,
memcpy(next_buffer,
tmpbuf + le32_to_cpu(shdr->NextCommand),
pdu_length - le32_to_cpu(shdr->NextCommand));
- }
+
+ server->total_read =
+ le32_to_cpu(shdr->NextCommand);
+ } else
+ server->total_read =
+ pdu_length - sizeof(struct smb2_transform_hdr);
mid_entry = smb2_find_mid(server, buf);
if (mid_entry == NULL)
When we have decrypted a compounded smb3 packet we need to fake total_read to match the individual pdu's in that compound. Otherwise, if we leave total_read to be the size of the full smb3 transform pdu this will trigger smb2_check_message to flag a length warning. Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com> --- fs/cifs/smb2misc.c | 2 +- fs/cifs/smb2ops.c | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-)