From 83cbd3c89fdea95d78f1d7fcf36a088599f3adfd Mon Sep 17 00:00:00 2001 From: Emmanuel Hocdet Date: Fri, 25 Oct 2019 11:55:03 +0200 Subject: [PATCH] BUG/MINOR: ssl: double free on error for ckch->{key,cert} On last error in ssl_sock_load_pem_into_ckch, key/cert are released and ckch->{key,cert} are released in ssl_sock_free_cert_key_and_chain_contents. --- src/ssl_sock.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/ssl_sock.c b/src/ssl_sock.c index c6878e460..770216d4a 100644 --- a/src/ssl_sock.c +++ b/src/ssl_sock.c @@ -3097,7 +3097,7 @@ static int ssl_sock_load_pem_into_ckch(const char *path, char *buf, struct cert_ { BIO *in = NULL; int ret = 1; - X509 *ca = NULL; + X509 *ca; X509 *cert = NULL; EVP_PKEY *key = NULL; DH *dh; @@ -3172,10 +3172,12 @@ static int ssl_sock_load_pem_into_ckch(const char *path, char *buf, struct cert_ if (ckch->key) /* free the previous key */ EVP_PKEY_free(ckch->key); ckch->key = key; + key = NULL; if (ckch->cert) /* free the previous cert */ X509_free(ckch->cert); ckch->cert = cert; + cert = NULL; /* Look for a Certificate Chain */ ca = PEM_read_bio_X509(in, NULL, NULL, NULL); @@ -3215,12 +3217,10 @@ static int ssl_sock_load_pem_into_ckch(const char *path, char *buf, struct cert_ ERR_clear_error(); if (in) BIO_free(in); - if (ret != 0) { - if (key) - EVP_PKEY_free(key); - if (cert) - X509_free(cert); - } + if (key) + EVP_PKEY_free(key); + if (cert) + X509_free(cert); return ret; }