summaryrefslogtreecommitdiffstats
path: root/ssl
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2015-07-28 16:04:53 +0100
committerDr. Stephen Henson <steve@openssl.org>2015-07-30 14:55:33 +0100
commita784665e52735f77a64d01216d7535834278c27c (patch)
treeeeacc2c8638667e106d1074714f54dd06d9963ac /ssl
parenta3f7ff2b2d1b1267cdf0bbce2374ebe149ed264a (diff)
Free and cleanse pms on error
Reviewed-by: Matt Caswell <matt@openssl.org>
Diffstat (limited to 'ssl')
-rw-r--r--ssl/s3_lib.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/ssl/s3_lib.c b/ssl/s3_lib.c
index 2954b58c03..0fc08819ca 100644
--- a/ssl/s3_lib.c
+++ b/ssl/s3_lib.c
@@ -4966,8 +4966,10 @@ int ssl_generate_master_secret(SSL *s, unsigned char *pms, size_t pmslen,
pskpmslen = 4 + pmslen + psklen;
pskpms = OPENSSL_malloc(pskpmslen);
- if (pskpms == NULL)
- return 0;
+ if (pskpms == NULL) {
+ s->session->master_key_length = 0;
+ goto err;
+ }
t = pskpms;
s2n(pmslen, t);
if (alg_k & SSL_kPSK)
@@ -4991,6 +4993,8 @@ int ssl_generate_master_secret(SSL *s, unsigned char *pms, size_t pmslen,
s->method->ssl3_enc->generate_master_secret(s,
s->session->master_key,
pms, pmslen);
+
+ err:
if (pms) {
if (free_pms)
OPENSSL_clear_free(pms, pmslen);