mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-04 12:20:42 +09:00
client: Properly reset session structures on disconnect
torture_connect_double test case used to test the connect only up to key exchange phase, but not after the new keys are stated to be used for communication. The keys from previous connectoin were not cleaned up from the previous invocation as well as the seqence number was not reset and therefore any further packet was failing with length-check errors or MAC errors. Signed-off-by: Jakub Jelen <jjelen@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
committed by
Andreas Schneider
parent
b3a7e86a4a
commit
f1b36c18f6
@@ -667,6 +667,8 @@ void ssh_disconnect(ssh_session session) {
|
||||
ssh_socket_close(session->socket);
|
||||
}
|
||||
error:
|
||||
session->recv_seq = 0;
|
||||
session->send_seq = 0;
|
||||
session->alive = 0;
|
||||
if (session->socket != NULL){
|
||||
ssh_socket_reset(session->socket);
|
||||
@@ -682,6 +684,13 @@ error:
|
||||
crypto_free(session->current_crypto);
|
||||
session->current_crypto=NULL;
|
||||
}
|
||||
if (session->next_crypto) {
|
||||
crypto_free(session->next_crypto);
|
||||
session->next_crypto = crypto_new();
|
||||
if (session->next_crypto == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
}
|
||||
}
|
||||
if (session->in_buffer) {
|
||||
ssh_buffer_reinit(session->in_buffer);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user