From 9a12f01f6e784c8cf714442014573d010266182d Mon Sep 17 00:00:00 2001
From: hzero1996 <wangcheng156@huawei.com>
Date: Fri, 31 May 2024 16:55:10 +0800
Subject: [PATCH] Revert "Release the drbg in the global default context before
 engines"

This reverts commit d0f8056c47f7aea40a34815fe459404f14501e81.


The fix patch for 3.1 will be merged later: d5c02e2de86a28ab2c06e866f0db858c43d00355
---
 crypto/context.c            | 15 ---------------
 crypto/rand/rand_lib.c      |  5 ++---
 include/crypto/rand.h       |  1 -
 include/internal/cryptlib.h |  2 --
 4 files changed, 2 insertions(+), 21 deletions(-)

diff --git a/crypto/context.c b/crypto/context.c
index 548665fba2..bdfc4d02a3 100644
--- a/crypto/context.c
+++ b/crypto/context.c
@@ -15,7 +15,6 @@
 #include "internal/bio.h"
 #include "internal/provider.h"
 #include "crypto/ctype.h"
-#include "crypto/rand.h"
 
 struct ossl_lib_ctx_onfree_list_st {
     ossl_lib_ctx_onfree_fn *fn;
@@ -272,20 +271,6 @@ OSSL_LIB_CTX *OSSL_LIB_CTX_set0_default(OSSL_LIB_CTX *libctx)
 
     return NULL;
 }
-
-void ossl_release_default_drbg_ctx(void)
-{
-    int dynidx = default_context_int.dyn_indexes[OSSL_LIB_CTX_DRBG_INDEX];
-
-    /* early release of the DRBG in global default libctx, no locking */
-    if (dynidx != -1) {
-        void *data;
-
-        data = CRYPTO_get_ex_data(&default_context_int.data, dynidx);
-        ossl_rand_ctx_free(data);
-        CRYPTO_set_ex_data(&default_context_int.data, dynidx, NULL);
-    }
-}
 #endif
 
 OSSL_LIB_CTX *ossl_lib_ctx_get_concrete(OSSL_LIB_CTX *ctx)
diff --git a/crypto/rand/rand_lib.c b/crypto/rand/rand_lib.c
index 5fde214448..edfae865b6 100644
--- a/crypto/rand/rand_lib.c
+++ b/crypto/rand/rand_lib.c
@@ -96,7 +96,6 @@ void ossl_rand_cleanup_int(void)
     CRYPTO_THREAD_lock_free(rand_meth_lock);
     rand_meth_lock = NULL;
 # endif
-    ossl_release_default_drbg_ctx();
     rand_inited = 0;
 }
 
@@ -476,7 +475,7 @@ static void *rand_ossl_ctx_new(OSSL_LIB_CTX *libctx)
     return NULL;
 }
 
-void ossl_rand_ctx_free(void *vdgbl)
+static void rand_ossl_ctx_free(void *vdgbl)
 {
     RAND_GLOBAL *dgbl = vdgbl;
 
@@ -501,7 +500,7 @@ void ossl_rand_ctx_free(void *vdgbl)
 static const OSSL_LIB_CTX_METHOD rand_drbg_ossl_ctx_method = {
     OSSL_LIB_CTX_METHOD_PRIORITY_2,
     rand_ossl_ctx_new,
-    ossl_rand_ctx_free,
+    rand_ossl_ctx_free,
 };
 
 static RAND_GLOBAL *rand_get_global(OSSL_LIB_CTX *libctx)
diff --git a/include/crypto/rand.h b/include/crypto/rand.h
index 165deaf95c..6a71a339c8 100644
--- a/include/crypto/rand.h
+++ b/include/crypto/rand.h
@@ -125,5 +125,4 @@ void ossl_rand_cleanup_nonce(ossl_unused const OSSL_CORE_HANDLE *handle,
 size_t ossl_pool_acquire_entropy(RAND_POOL *pool);
 int ossl_pool_add_nonce_data(RAND_POOL *pool);
 
-void ossl_rand_ctx_free(void *vdgbl);
 #endif
diff --git a/include/internal/cryptlib.h b/include/internal/cryptlib.h
index 934d4b089c..1291299b6e 100644
--- a/include/internal/cryptlib.h
+++ b/include/internal/cryptlib.h
@@ -199,8 +199,6 @@ int ossl_lib_ctx_run_once(OSSL_LIB_CTX *ctx, unsigned int idx,
 int ossl_lib_ctx_onfree(OSSL_LIB_CTX *ctx, ossl_lib_ctx_onfree_fn onfreefn);
 const char *ossl_lib_ctx_get_descriptor(OSSL_LIB_CTX *libctx);
 
-void ossl_release_default_drbg_ctx(void);
-
 OSSL_LIB_CTX *ossl_crypto_ex_data_get_ossl_lib_ctx(const CRYPTO_EX_DATA *ad);
 int ossl_crypto_new_ex_data_ex(OSSL_LIB_CTX *ctx, int class_index, void *obj,
                                CRYPTO_EX_DATA *ad);
-- 
2.33.0

