Fix memory leaks on error cases during drbg initializations
Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Tom Cosgrove <tom.cosgrove@arm.com> (Merged from https://github.com/openssl/openssl/pull/23503)
This commit is contained in:
parent
76cecff5e9
commit
cb4f7a6ee0
@ -788,6 +788,7 @@ int ossl_drbg_enable_locking(void *vctx)
|
||||
PROV_DRBG *ossl_rand_drbg_new
|
||||
(void *provctx, void *parent, const OSSL_DISPATCH *p_dispatch,
|
||||
int (*dnew)(PROV_DRBG *ctx),
|
||||
void (*dfree)(void *vctx),
|
||||
int (*instantiate)(PROV_DRBG *drbg,
|
||||
const unsigned char *entropy, size_t entropylen,
|
||||
const unsigned char *nonce, size_t noncelen,
|
||||
@ -865,7 +866,7 @@ PROV_DRBG *ossl_rand_drbg_new
|
||||
return drbg;
|
||||
|
||||
err:
|
||||
ossl_rand_drbg_free(drbg);
|
||||
dfree(drbg);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -612,7 +612,7 @@ err:
|
||||
EVP_CIPHER_CTX_free(ctr->ctx_ecb);
|
||||
EVP_CIPHER_CTX_free(ctr->ctx_ctr);
|
||||
ctr->ctx_ecb = ctr->ctx_ctr = NULL;
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int drbg_ctr_new(PROV_DRBG *drbg)
|
||||
@ -631,7 +631,8 @@ static int drbg_ctr_new(PROV_DRBG *drbg)
|
||||
static void *drbg_ctr_new_wrapper(void *provctx, void *parent,
|
||||
const OSSL_DISPATCH *parent_dispatch)
|
||||
{
|
||||
return ossl_rand_drbg_new(provctx, parent, parent_dispatch, &drbg_ctr_new,
|
||||
return ossl_rand_drbg_new(provctx, parent, parent_dispatch,
|
||||
&drbg_ctr_new, &drbg_ctr_free,
|
||||
&drbg_ctr_instantiate, &drbg_ctr_uninstantiate,
|
||||
&drbg_ctr_reseed, &drbg_ctr_generate);
|
||||
}
|
||||
|
@ -439,7 +439,8 @@ static int drbg_hash_new(PROV_DRBG *ctx)
|
||||
static void *drbg_hash_new_wrapper(void *provctx, void *parent,
|
||||
const OSSL_DISPATCH *parent_dispatch)
|
||||
{
|
||||
return ossl_rand_drbg_new(provctx, parent, parent_dispatch, &drbg_hash_new,
|
||||
return ossl_rand_drbg_new(provctx, parent, parent_dispatch,
|
||||
&drbg_hash_new, &drbg_hash_free,
|
||||
&drbg_hash_instantiate, &drbg_hash_uninstantiate,
|
||||
&drbg_hash_reseed, &drbg_hash_generate);
|
||||
}
|
||||
|
@ -331,7 +331,8 @@ static int drbg_hmac_new(PROV_DRBG *drbg)
|
||||
static void *drbg_hmac_new_wrapper(void *provctx, void *parent,
|
||||
const OSSL_DISPATCH *parent_dispatch)
|
||||
{
|
||||
return ossl_rand_drbg_new(provctx, parent, parent_dispatch, &drbg_hmac_new,
|
||||
return ossl_rand_drbg_new(provctx, parent, parent_dispatch,
|
||||
&drbg_hmac_new, &drbg_hmac_free,
|
||||
&drbg_hmac_instantiate, &drbg_hmac_uninstantiate,
|
||||
&drbg_hmac_reseed, &drbg_hmac_generate);
|
||||
}
|
||||
|
@ -176,6 +176,7 @@ struct prov_drbg_st {
|
||||
PROV_DRBG *ossl_rand_drbg_new
|
||||
(void *provctx, void *parent, const OSSL_DISPATCH *parent_dispatch,
|
||||
int (*dnew)(PROV_DRBG *ctx),
|
||||
void (*dfree)(void *vctx),
|
||||
int (*instantiate)(PROV_DRBG *drbg,
|
||||
const unsigned char *entropy, size_t entropylen,
|
||||
const unsigned char *nonce, size_t noncelen,
|
||||
|
Loading…
x
Reference in New Issue
Block a user