From: Pavel Kopyl
Date: Fri, 3 Nov 2017 15:18:59 +0000 (+0300)
Subject: Fix memory leaks in CA related functions.
X-Git-Tag: OpenSSL_1_1_1-pre7~120
X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=aebd0e5ca12d1ba0b229a4121a54afa5ea2d8aa1;p=oweals%2Fopenssl.git
Fix memory leaks in CA related functions.
Reviewed-by: Rich Salz
Reviewed-by: Richard Levitte
(Merged from https://github.com/openssl/openssl/pull/4700)
---
diff --git a/apps/ca.c b/apps/ca.c
index ea774ad557..afc5e349b4 100644
--- a/apps/ca.c
+++ b/apps/ca.c
@@ -934,10 +934,13 @@ end_of_options:
if (j > 0) {
total_done++;
BIO_printf(bio_err, "\n");
- if (!BN_add_word(serial, 1))
+ if (!BN_add_word(serial, 1)) {
+ X509_free(x);
goto end;
+ }
if (!sk_X509_push(cert_sk, x)) {
BIO_printf(bio_err, "Memory allocation failure\n");
+ X509_free(x);
goto end;
}
}
diff --git a/apps/verify.c b/apps/verify.c
index 5ad6ef4151..38377a57e4 100644
--- a/apps/verify.c
+++ b/apps/verify.c
@@ -225,6 +225,7 @@ static int check(X509_STORE *ctx, const char *file,
X509_STORE_set_flags(ctx, vflags);
if (!X509_STORE_CTX_init(csc, ctx, x, uchain)) {
+ X509_STORE_CTX_free(csc);
printf("error %s: X.509 store context initialization failed\n",
(file == NULL) ? "stdin" : file);
goto end;
diff --git a/crypto/conf/conf_api.c b/crypto/conf/conf_api.c
index ade54839bb..9606b7f222 100644
--- a/crypto/conf/conf_api.c
+++ b/crypto/conf/conf_api.c
@@ -204,12 +204,14 @@ CONF_VALUE *_CONF_new_section(CONF *conf, const char *section)
v->value = (char *)sk;
vv = lh_CONF_VALUE_insert(conf->data, v);
- if (vv != NULL)
+ if (vv != NULL || lh_CONF_VALUE_error(conf->data) > 0)
goto err;
return v;
err:
sk_CONF_VALUE_free(sk);
+ if (v != NULL)
+ OPENSSL_free(v->section);
OPENSSL_free(v);
return NULL;
}
diff --git a/crypto/engine/eng_lib.c b/crypto/engine/eng_lib.c
index 95736eda6a..9028319788 100644
--- a/crypto/engine/eng_lib.c
+++ b/crypto/engine/eng_lib.c
@@ -154,8 +154,10 @@ void engine_cleanup_add_last(ENGINE_CLEANUP_CB *cb)
if (!int_cleanup_check(1))
return;
item = int_cleanup_item(cb);
- if (item)
- sk_ENGINE_CLEANUP_ITEM_push(cleanup_stack, item);
+ if (item != NULL) {
+ if (sk_ENGINE_CLEANUP_ITEM_push(cleanup_stack, item) <= 0)
+ OPENSSL_free(item);
+ }
}
/* The API function that performs all cleanup */