mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 13:14:02 +02:00
smb: client: fix server->total_read for compound encrypted PDUs
In receive_encrypted_standard(), server->total_read is left at the
full decrypted frame size when walking sub-PDUs of a compound encrypted
frame. As a result, cifs_handle_standard() passes this full size
to smb2_check_message(), causing the PDU length guards to incorrectly
validate the entire compound frame instead of the current sub-PDU.
This allows truncated non-last sub-PDUs to bypass length validation,
leading to out-of-bounds reads in smb2_get_data_area_len().
Fix this by setting server->total_read to the true length of the
current sub-PDU: next_cmd for non-last sub-PDUs, and the remaining
pdu_length for the last one.
Fixes: b24df3e30c ("cifs: update receive_encrypted_standard to handle compounded responses")
Cc: stable@vger.kernel.org
Signed-off-by: Frank Sorenson <sorenson@redhat.com>
Reviewed-by: David Howells <dhowells@redhat.com>
Signed-off-by: Paulo Alcantara <pc@manguebit.org>
This commit is contained in:
parent
b4694f269e
commit
f73726b83e
|
|
@ -5371,6 +5371,7 @@ receive_encrypted_standard(struct TCP_Server_Info *server,
|
|||
one_more:
|
||||
shdr = (struct smb2_hdr *)buf;
|
||||
next_cmd = le32_to_cpu(shdr->NextCommand);
|
||||
server->total_read = next_cmd ? next_cmd : pdu_length;
|
||||
|
||||
if (*num_mids >= MAX_COMPOUND) {
|
||||
cifs_server_dbg(VFS, "too many PDUs in compound\n");
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user