1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-27 03:21:53 +03:00

Ensure we don't leak any sign records on cancel of pending requests.

Jeremy.
This commit is contained in:
Jeremy Allison 0001-01-01 00:00:00 +00:00
parent 270bf20fe3
commit 9a8ffc239c
3 changed files with 29 additions and 0 deletions

View File

@ -809,11 +809,38 @@ void srv_defer_sign_response(uint16 mid)
data = (struct smb_basic_signing_context *)srv_sign_info.signing_context; data = (struct smb_basic_signing_context *)srv_sign_info.signing_context;
if (!data)
return;
store_sequence_for_reply(&data->outstanding_packet_list, store_sequence_for_reply(&data->outstanding_packet_list,
mid, data->send_seq_num); mid, data->send_seq_num);
data->send_seq_num++; data->send_seq_num++;
} }
/***********************************************************
Called to remove sequence records when a deferred packet is
cancelled by mid. This should never find one....
************************************************************/
void srv_cancel_sign_response(uint16 mid)
{
struct smb_basic_signing_context *data;
uint32 dummy_seq;
if (!srv_sign_info.doing_signing)
return;
data = (struct smb_basic_signing_context *)srv_sign_info.signing_context;
if (!data)
return;
DEBUG(10,("srv_cancel_sign_response: for mid %u\n", (unsigned int)mid ));
while (get_sequence_for_reply(&data->outstanding_packet_list, mid, &dummy_seq))
;
}
/*********************************************************** /***********************************************************
Called by server negprot when signing has been negotiated. Called by server negprot when signing has been negotiated.
************************************************************/ ************************************************************/

View File

@ -44,6 +44,7 @@ static struct change_notify *change_notify_list;
/**************************************************************************** /****************************************************************************
Setup the common parts of the return packet and send it. Setup the common parts of the return packet and send it.
*****************************************************************************/ *****************************************************************************/
static void change_notify_reply_packet(char *inbuf, NTSTATUS error_code) static void change_notify_reply_packet(char *inbuf, NTSTATUS error_code)
{ {
char outbuf[smb_size+38]; char outbuf[smb_size+38];

View File

@ -1443,6 +1443,7 @@ int reply_ntcancel(connection_struct *conn,
START_PROFILE(SMBntcancel); START_PROFILE(SMBntcancel);
remove_pending_change_notify_requests_by_mid(mid); remove_pending_change_notify_requests_by_mid(mid);
remove_pending_lock_requests_by_mid(mid); remove_pending_lock_requests_by_mid(mid);
srv_cancel_sign_response(mid);
DEBUG(3,("reply_ntcancel: cancel called on mid = %d.\n", mid)); DEBUG(3,("reply_ntcancel: cancel called on mid = %d.\n", mid));