[openssl] master update
Matt Caswell
matt at openssl.org
Mon Jan 20 14:52:43 UTC 2020
The branch master has been updated
via 09a4cb9ec7ea9ccb4885588ba3e138b9f5f606c7 (commit)
from 2dd04ca881414779e847a21e6be4e428257c25f1 (commit)
- Log -----------------------------------------------------------------
commit 09a4cb9ec7ea9ccb4885588ba3e138b9f5f606c7
Author: Matt Caswell <matt at openssl.org>
Date: Wed Jan 15 18:11:04 2020 +0000
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 at openssl.org>
(Merged from https://github.com/openssl/openssl/pull/10862)
-----------------------------------------------------------------------
Summary of changes:
crypto/rand/drbg_lib.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/crypto/rand/drbg_lib.c b/crypto/rand/drbg_lib.c
index 2c9ed3fb6d..a695a5f7dd 100644
--- a/crypto/rand/drbg_lib.c
+++ b/crypto/rand/drbg_lib.c
@@ -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);
More information about the openssl-commits
mailing list