diff options
author | Jakub Jelen <jjelen@redhat.com> | 2020-04-28 12:27:03 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2020-05-05 14:23:06 +0200 |
commit | 239eef6322d1bca0786a60f68dab3d9b402a41b7 (patch) | |
tree | 7b9a9b6f53117652d060b60ef4509e7be01bc1c3 /src | |
parent | 201fd661767f769584d782503c9fa59a5d1f340d (diff) | |
download | libssh-239eef6322d1bca0786a60f68dab3d9b402a41b7.tar.gz libssh-239eef6322d1bca0786a60f68dab3d9b402a41b7.tar.xz libssh-239eef6322d1bca0786a60f68dab3d9b402a41b7.zip |
packet: Check if set_*_key functions exists before calling it
Signed-off-by: Jakub Jelen <jjelen@redhat.com>
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/packet.c | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/src/packet.c b/src/packet.c index c53800ea..40b60a10 100644 --- a/src/packet.c +++ b/src/packet.c @@ -1969,23 +1969,27 @@ ssh_packet_set_newkeys(ssh_session session, session->opts.rekey_time/1000); } - /* Initialize the encryption and decryption keys in next_crypto */ - rc = in_cipher->set_decrypt_key(in_cipher, - session->next_crypto->decryptkey, - session->next_crypto->decryptIV); - if (rc < 0) { - /* On error, make sure it is not used */ - session->next_crypto->used = 0; - return SSH_ERROR; + if (in_cipher->set_decrypt_key) { + /* Initialize the encryption and decryption keys in next_crypto */ + rc = in_cipher->set_decrypt_key(in_cipher, + session->next_crypto->decryptkey, + session->next_crypto->decryptIV); + if (rc < 0) { + /* On error, make sure it is not used */ + session->next_crypto->used = 0; + return SSH_ERROR; + } } - rc = out_cipher->set_encrypt_key(out_cipher, - session->next_crypto->encryptkey, - session->next_crypto->encryptIV); - if (rc < 0) { - /* On error, make sure it is not used */ - session->next_crypto->used = 0; - return SSH_ERROR; + if (out_cipher->set_encrypt_key) { + rc = out_cipher->set_encrypt_key(out_cipher, + session->next_crypto->encryptkey, + session->next_crypto->encryptIV); + if (rc < 0) { + /* On error, make sure it is not used */ + session->next_crypto->used = 0; + return SSH_ERROR; + } } return SSH_OK; |