Skip to content

Commit

Permalink
Fix memory leaks on error cases during drbg initializations
Browse files Browse the repository at this point in the history
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tom Cosgrove <tom.cosgrove@arm.com>
(Merged from #23503)

(cherry picked from commit cb4f7a6)
  • Loading branch information
t8m committed Feb 9, 2024
1 parent a3e131b commit c10ae45
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 5 deletions.
3 changes: 2 additions & 1 deletion providers/implementations/rands/drbg.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -865,7 +866,7 @@ PROV_DRBG *ossl_rand_drbg_new
return drbg;

err:
ossl_rand_drbg_free(drbg);
dfree(drbg);
return NULL;
}

Expand Down
5 changes: 3 additions & 2 deletions providers/implementations/rands/drbg_ctr.c
Original file line number Diff line number Diff line change
Expand Up @@ -612,7 +612,7 @@ static int drbg_ctr_init(PROV_DRBG *drbg)
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)
Expand All @@ -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);
}
Expand Down
3 changes: 2 additions & 1 deletion providers/implementations/rands/drbg_hash.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
3 changes: 2 additions & 1 deletion providers/implementations/rands/drbg_hmac.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
1 change: 1 addition & 0 deletions providers/implementations/rands/drbg_local.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit c10ae45

Please sign in to comment.