Fix issues with do_rand_init/rand_cleanup_int
Fixes #7022 Reviewed-by: Paul Dale <paul.dale@oracle.com> (Merged from https://github.com/openssl/openssl/pull/7588)
This commit is contained in:
parent
e9994901f8
commit
e2d227bb4a
1 changed files with 8 additions and 4 deletions
|
@ -31,7 +31,7 @@ int rand_fork_count;
|
||||||
static CRYPTO_RWLOCK *rand_nonce_lock;
|
static CRYPTO_RWLOCK *rand_nonce_lock;
|
||||||
static int rand_nonce_count;
|
static int rand_nonce_count;
|
||||||
|
|
||||||
static int rand_cleaning_up = 0;
|
static int rand_inited = 0;
|
||||||
|
|
||||||
#ifdef OPENSSL_RAND_SEED_RDTSC
|
#ifdef OPENSSL_RAND_SEED_RDTSC
|
||||||
/*
|
/*
|
||||||
|
@ -319,13 +319,15 @@ DEFINE_RUN_ONCE_STATIC(do_rand_init)
|
||||||
if (rand_nonce_lock == NULL)
|
if (rand_nonce_lock == NULL)
|
||||||
goto err2;
|
goto err2;
|
||||||
|
|
||||||
if (!rand_cleaning_up && !rand_pool_init())
|
if (!rand_pool_init())
|
||||||
goto err3;
|
goto err3;
|
||||||
|
|
||||||
|
rand_inited = 1;
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
err3:
|
err3:
|
||||||
rand_pool_cleanup();
|
CRYPTO_THREAD_lock_free(rand_nonce_lock);
|
||||||
|
rand_nonce_lock = NULL;
|
||||||
err2:
|
err2:
|
||||||
CRYPTO_THREAD_lock_free(rand_meth_lock);
|
CRYPTO_THREAD_lock_free(rand_meth_lock);
|
||||||
rand_meth_lock = NULL;
|
rand_meth_lock = NULL;
|
||||||
|
@ -341,7 +343,8 @@ void rand_cleanup_int(void)
|
||||||
{
|
{
|
||||||
const RAND_METHOD *meth = default_RAND_meth;
|
const RAND_METHOD *meth = default_RAND_meth;
|
||||||
|
|
||||||
rand_cleaning_up = 1;
|
if (!rand_inited)
|
||||||
|
return;
|
||||||
|
|
||||||
if (meth != NULL && meth->cleanup != NULL)
|
if (meth != NULL && meth->cleanup != NULL)
|
||||||
meth->cleanup();
|
meth->cleanup();
|
||||||
|
@ -355,6 +358,7 @@ void rand_cleanup_int(void)
|
||||||
rand_meth_lock = NULL;
|
rand_meth_lock = NULL;
|
||||||
CRYPTO_THREAD_lock_free(rand_nonce_lock);
|
CRYPTO_THREAD_lock_free(rand_nonce_lock);
|
||||||
rand_nonce_lock = NULL;
|
rand_nonce_lock = NULL;
|
||||||
|
rand_inited = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue