summaryrefslogtreecommitdiffstats
path: root/providers
diff options
context:
space:
mode:
authorPauli <pauli@openssl.org>2021-09-21 09:19:35 +1000
committerPauli <pauli@openssl.org>2021-09-22 18:02:00 +1000
commit7260376b775dc929ef205561e1adb244c0dd87af (patch)
tree33d599997770dba4acb516531f6f30fbbfd74a63 /providers
parentc9fb4c816b6648eccb31ebe84871d50dbfc87b3a (diff)
rand: don't free an mis-set pointer on error
This is adding robustness to the code. The fix to not mis-set the pointer is in #16636. Fixes #16631 Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com> (Merged from https://github.com/openssl/openssl/pull/16640) (cherry picked from commit caf569a5b3271c2860732ee44509f3825a179fd5)
Diffstat (limited to 'providers')
-rw-r--r--providers/implementations/rands/drbg.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/providers/implementations/rands/drbg.c b/providers/implementations/rands/drbg.c
index 81343fbd52..8b899b99b1 100644
--- a/providers/implementations/rands/drbg.c
+++ b/providers/implementations/rands/drbg.c
@@ -459,9 +459,11 @@ int ossl_prov_drbg_instantiate(PROV_DRBG *drbg, unsigned int strength,
if (!drbg->instantiate(drbg, entropy, entropylen, nonce, noncelen,
pers, perslen)) {
+ cleanup_entropy(drbg, entropy, entropylen);
ERR_raise(ERR_LIB_PROV, PROV_R_ERROR_INSTANTIATING_DRBG);
goto end;
}
+ cleanup_entropy(drbg, entropy, entropylen);
drbg->state = EVP_RAND_STATE_READY;
drbg->generate_counter = 1;
@@ -469,8 +471,6 @@ int ossl_prov_drbg_instantiate(PROV_DRBG *drbg, unsigned int strength,
tsan_store(&drbg->reseed_counter, drbg->reseed_next_counter);
end:
- if (entropy != NULL)
- cleanup_entropy(drbg, entropy, entropylen);
if (nonce != NULL)
ossl_prov_cleanup_nonce(drbg->provctx, nonce, noncelen);
if (drbg->state == EVP_RAND_STATE_READY)