Commit bdb88976 authored by Bernd Edlinger's avatar Bernd Edlinger
Browse files

Fix issues with do_rand_init/rand_cleanup_int



Fixes #7022

Reviewed-by: default avatarPaul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/7588)

(cherry picked from commit e2d227bb4a25bb75354a40816439630a8162f073)
parent 37044f45
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ int rand_fork_count;
static CRYPTO_RWLOCK *rand_nonce_lock;
static int rand_nonce_count;

static int rand_cleaning_up = 0;
static int rand_inited = 0;

#ifdef OPENSSL_RAND_SEED_RDTSC
/*
@@ -319,13 +319,15 @@ DEFINE_RUN_ONCE_STATIC(do_rand_init)
    if (rand_nonce_lock == NULL)
        goto err2;

    if (!rand_cleaning_up && !rand_pool_init())
    if (!rand_pool_init())
        goto err3;

    rand_inited = 1;
    return 1;

err3:
    rand_pool_cleanup();
    CRYPTO_THREAD_lock_free(rand_nonce_lock);
    rand_nonce_lock = NULL;
err2:
    CRYPTO_THREAD_lock_free(rand_meth_lock);
    rand_meth_lock = NULL;
@@ -341,7 +343,8 @@ void rand_cleanup_int(void)
{
    const RAND_METHOD *meth = default_RAND_meth;

    rand_cleaning_up = 1;
    if (!rand_inited)
        return;

    if (meth != NULL && meth->cleanup != NULL)
        meth->cleanup();
@@ -355,6 +358,7 @@ void rand_cleanup_int(void)
    rand_meth_lock = NULL;
    CRYPTO_THREAD_lock_free(rand_nonce_lock);
    rand_nonce_lock = NULL;
    rand_inited = 0;
}

/*