aboutsummaryrefslogtreecommitdiff
path: root/src/ecdh.c
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2013-06-17 12:55:04 +0200
committerAndreas Schneider <asn@cryptomilk.org>2013-06-17 12:59:22 +0200
commitf31c33bb31b8abcb8b6eb2b9bd9576833e79fe61 (patch)
tree7ff588270606099ce9a92f1f743e9003e2f50984 /src/ecdh.c
parent4255a7223c8b0657e10618d73fe1488295090fc7 (diff)
downloadlibssh-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.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/src/ecdh.c b/src/ecdh.c
index bc0b03ce..9e455495 100644
--- a/src/ecdh.c
+++ b/src/ecdh.c
@@ -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) {