summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjsing <>2016-12-03 12:38:10 +0000
committerjsing <>2016-12-03 12:38:10 +0000
commit23857f34c1e1f6362c4594df7a9ebaaaad450986 (patch)
treed7b62c3cbb2b4d2d654a99abc42342db571cc9f6
parentaf83ada514fa464f3509c3fea817e54aec9e8ed5 (diff)
downloadopenbsd-23857f34c1e1f6362c4594df7a9ebaaaad450986.tar.gz
openbsd-23857f34c1e1f6362c4594df7a9ebaaaad450986.tar.bz2
openbsd-23857f34c1e1f6362c4594df7a9ebaaaad450986.zip
Address a potential leak in ssl3_get_server_kex_ecdhe() - if we allocate
ngroup and the following EC_KEY_set_group() fails, ngroup will not be freed. Avoid this by freeing on return. ok millert@
-rw-r--r--src/lib/libssl/s3_clnt.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/lib/libssl/s3_clnt.c b/src/lib/libssl/s3_clnt.c
index 08b804dcfe..a70e5492a3 100644
--- a/src/lib/libssl/s3_clnt.c
+++ b/src/lib/libssl/s3_clnt.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: s3_clnt.c,v 1.146 2016/12/03 12:34:35 jsing Exp $ */ 1/* $OpenBSD: s3_clnt.c,v 1.147 2016/12/03 12:38:10 jsing Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -1182,7 +1182,7 @@ ssl3_get_server_kex_ecdhe(SSL *s, EVP_PKEY **pkey, unsigned char **pp, long *nn)
1182 EC_KEY *ecdh = NULL; 1182 EC_KEY *ecdh = NULL;
1183 BN_CTX *bn_ctx = NULL; 1183 BN_CTX *bn_ctx = NULL;
1184 const EC_GROUP *group; 1184 const EC_GROUP *group;
1185 EC_GROUP *ngroup; 1185 EC_GROUP *ngroup = NULL;
1186 SESS_CERT *sc; 1186 SESS_CERT *sc;
1187 int curve_nid; 1187 int curve_nid;
1188 long alg_a; 1188 long alg_a;
@@ -1239,7 +1239,6 @@ ssl3_get_server_kex_ecdhe(SSL *s, EVP_PKEY **pkey, unsigned char **pp, long *nn)
1239 SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, ERR_R_EC_LIB); 1239 SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, ERR_R_EC_LIB);
1240 goto err; 1240 goto err;
1241 } 1241 }
1242 EC_GROUP_free(ngroup);
1243 1242
1244 group = EC_KEY_get0_group(ecdh); 1243 group = EC_KEY_get0_group(ecdh);
1245 1244
@@ -1277,6 +1276,7 @@ ssl3_get_server_kex_ecdhe(SSL *s, EVP_PKEY **pkey, unsigned char **pp, long *nn)
1277 sc->peer_ecdh_tmp = ecdh; 1276 sc->peer_ecdh_tmp = ecdh;
1278 1277
1279 BN_CTX_free(bn_ctx); 1278 BN_CTX_free(bn_ctx);
1279 EC_GROUP_free(ngroup);
1280 EC_POINT_free(srvr_ecpoint); 1280 EC_POINT_free(srvr_ecpoint);
1281 1281
1282 *nn = CBS_len(&cbs); 1282 *nn = CBS_len(&cbs);
@@ -1293,6 +1293,7 @@ ssl3_get_server_kex_ecdhe(SSL *s, EVP_PKEY **pkey, unsigned char **pp, long *nn)
1293 1293
1294 err: 1294 err:
1295 BN_CTX_free(bn_ctx); 1295 BN_CTX_free(bn_ctx);
1296 EC_GROUP_free(ngroup);
1296 EC_POINT_free(srvr_ecpoint); 1297 EC_POINT_free(srvr_ecpoint);
1297 EC_KEY_free(ecdh); 1298 EC_KEY_free(ecdh);
1298 1299