mirror of
https://github.com/samba-team/samba.git
synced 2025-01-06 13:18:07 +03:00
s3:smb2_server: correctly maintain request counters for compound requests
If a session expires during a compound request chain,
we exit smbd_smb2_request_dispatch() with
'return smbd_smb2_request_error(req, ...)' before
calling smbd_smb2_request_dispatch_update_counts().
As req->request_counters_updated was only reset
within smbd_smb2_request_dispatch_update_counts(),
smbd_smb2_request_reply_update_counts() was called
twice on the same request, which triggers
SMB_ASSERT(op->request_count > 0);
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13215
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
(cherry picked from commit 87e25cd1e4
)
This commit is contained in:
parent
e1c58ec4ee
commit
fb602bddc4
@ -2148,7 +2148,7 @@ static NTSTATUS smbd_smb2_request_dispatch_update_counts(
|
||||
bool update_open = false;
|
||||
NTSTATUS status = NT_STATUS_OK;
|
||||
|
||||
req->request_counters_updated = false;
|
||||
SMB_ASSERT(!req->request_counters_updated);
|
||||
|
||||
if (xconn->protocol < PROTOCOL_SMB2_22) {
|
||||
return NT_STATUS_OK;
|
||||
@ -2283,6 +2283,8 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
|
||||
|
||||
DO_PROFILE_INC(request);
|
||||
|
||||
SMB_ASSERT(!req->request_counters_updated);
|
||||
|
||||
/* TODO: verify more things */
|
||||
|
||||
flags = IVAL(inhdr, SMB2_HDR_FLAGS);
|
||||
@ -2722,6 +2724,8 @@ static void smbd_smb2_request_reply_update_counts(struct smbd_smb2_request *req)
|
||||
return;
|
||||
}
|
||||
|
||||
req->request_counters_updated = false;
|
||||
|
||||
if (xconn->protocol < PROTOCOL_SMB2_22) {
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user