diff options
author | jsing <> | 2016-12-03 12:38:10 +0000 |
---|---|---|
committer | jsing <> | 2016-12-03 12:38:10 +0000 |
commit | 23857f34c1e1f6362c4594df7a9ebaaaad450986 (patch) | |
tree | d7b62c3cbb2b4d2d654a99abc42342db571cc9f6 | |
parent | af83ada514fa464f3509c3fea817e54aec9e8ed5 (diff) | |
download | openbsd-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.c | 7 |
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 | ||