diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2013-06-17 12:55:04 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2013-06-17 12:59:22 +0200 |
commit | f31c33bb31b8abcb8b6eb2b9bd9576833e79fe61 (patch) | |
tree | 7ff588270606099ce9a92f1f743e9003e2f50984 /src/ecdh.c | |
parent | 4255a7223c8b0657e10618d73fe1488295090fc7 (diff) | |
download | libssh-f31c33bb31b8abcb8b6eb2b9bd9576833e79fe61.tar.gz libssh-f31c33bb31b8abcb8b6eb2b9bd9576833e79fe61.tar.xz libssh-f31c33bb31b8abcb8b6eb2b9bd9576833e79fe61.zip |
ecdh: Check return values of buffer_add_* functions.
Diffstat (limited to 'src/ecdh.c')
-rw-r--r-- | src/ecdh.c | 27 |
1 files changed, 23 insertions, 4 deletions
@@ -59,7 +59,11 @@ int ssh_client_ecdh_init(ssh_session session){ EC_POINT_point2oct(group,pubkey,POINT_CONVERSION_UNCOMPRESSED, ssh_string_data(client_pubkey),len,ctx); - buffer_add_ssh_string(session->out_buffer,client_pubkey); + rc = buffer_add_ssh_string(session->out_buffer,client_pubkey); + if (rc < 0) { + goto error; + } + BN_CTX_free(ctx); session->next_crypto->ecdh_privkey = key; session->next_crypto->ecdh_client_pubkey = client_pubkey; @@ -221,7 +225,12 @@ int ssh_server_ecdh_init(ssh_session session, ssh_buffer packet){ session->next_crypto->ecdh_privkey = ecdh_key; session->next_crypto->ecdh_server_pubkey = q_s_string; - buffer_add_u8(session->out_buffer, SSH2_MSG_KEXDH_REPLY); + rc = buffer_add_u8(session->out_buffer, SSH2_MSG_KEXDH_REPLY); + if (rc < 0) { + ssh_set_error_oom(session); + goto error; + } + /* build k and session_id */ if (ecdh_build_k(session) < 0) { ssh_set_error(session, SSH_FATAL, "Cannot build k number"); @@ -235,9 +244,19 @@ int ssh_server_ecdh_init(ssh_session session, ssh_buffer packet){ } /* add host's public key */ - buffer_add_ssh_string(session->out_buffer, session->next_crypto->server_pubkey); + rc = buffer_add_ssh_string(session->out_buffer, + session->next_crypto->server_pubkey); + if (rc < 0) { + ssh_set_error_oom(session); + goto error; + } + /* add ecdh public key */ - buffer_add_ssh_string(session->out_buffer,q_s_string); + rc = buffer_add_ssh_string(session->out_buffer, q_s_string); + if (rc < 0) { + ssh_set_error_oom(session); + goto error; + } /* add signature blob */ sig_blob = ssh_srv_pki_do_sign_sessionid(session, privkey); if (sig_blob == NULL) { |