projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Free and cleanse pms on error
[openssl.git]
/
ssl
/
s3_lib.c
diff --git
a/ssl/s3_lib.c
b/ssl/s3_lib.c
index 2954b58c039d406cf78a08fb6958167adba8c5c3..0fc08819cacc8988b19cf6e7c932545935b55404 100644
(file)
--- 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);
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)
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);
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);
if (pms) {
if (free_pms)
OPENSSL_clear_free(pms, pmslen);