mirror of
https://github.com/openssl/openssl.git
synced 2025-03-01 19:28:10 +08:00
Don't register drbg_delete_thread_state twice
drbg_delete_thread_state cleans up after both the public and the private DRBG. It can be registered automtically by getting either of those DRBGs, but it should not be registered twice. Reviewed-by: Richard Levitte <levitte@openssl.org> (Merged from https://github.com/openssl/openssl/pull/10862)
This commit is contained in:
parent
2dd04ca881
commit
09a4cb9ec7
@ -1353,7 +1353,12 @@ RAND_DRBG *OPENSSL_CTX_get0_public_drbg(OPENSSL_CTX *ctx)
|
||||
drbg = CRYPTO_THREAD_get_local(&dgbl->public_drbg);
|
||||
if (drbg == NULL) {
|
||||
ctx = openssl_ctx_get_concrete(ctx);
|
||||
if (!ossl_init_thread_start(NULL, ctx, drbg_delete_thread_state))
|
||||
/*
|
||||
* If the private_drbg is also NULL then this is the first time we've
|
||||
* used this thread.
|
||||
*/
|
||||
if (CRYPTO_THREAD_get_local(&dgbl->private_drbg) == NULL
|
||||
&& !ossl_init_thread_start(NULL, ctx, drbg_delete_thread_state))
|
||||
return NULL;
|
||||
drbg = drbg_setup(ctx, dgbl->master_drbg, RAND_DRBG_TYPE_PUBLIC);
|
||||
CRYPTO_THREAD_set_local(&dgbl->public_drbg, drbg);
|
||||
@ -1381,7 +1386,12 @@ RAND_DRBG *OPENSSL_CTX_get0_private_drbg(OPENSSL_CTX *ctx)
|
||||
drbg = CRYPTO_THREAD_get_local(&dgbl->private_drbg);
|
||||
if (drbg == NULL) {
|
||||
ctx = openssl_ctx_get_concrete(ctx);
|
||||
if (!ossl_init_thread_start(NULL, ctx, drbg_delete_thread_state))
|
||||
/*
|
||||
* If the public_drbg is also NULL then this is the first time we've
|
||||
* used this thread.
|
||||
*/
|
||||
if (CRYPTO_THREAD_get_local(&dgbl->public_drbg) == NULL
|
||||
&& !ossl_init_thread_start(NULL, ctx, drbg_delete_thread_state))
|
||||
return NULL;
|
||||
drbg = drbg_setup(ctx, dgbl->master_drbg, RAND_DRBG_TYPE_PRIVATE);
|
||||
CRYPTO_THREAD_set_local(&dgbl->private_drbg, drbg);
|
||||
|
Loading…
Reference in New Issue
Block a user