In rand_cleanup_int(), don't go creating a default method

If no default method was yet given, RAND_get_rand_method() will set it
up.  Doing so just to clean it away seems pretty silly, so instead,
use the default_RAND_meth variable directly.

This also clears a possible race condition where this will try to init
things, such as ERR or ENGINE when in the middle of a OPENSSL_cleanup.

Fixes #3128

Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3136)
This commit is contained in:
Richard Levitte 2017-04-06 10:24:55 +02:00
parent 5748e4dc3a
commit 5006b37b31

View File

@ -74,7 +74,7 @@ int RAND_set_rand_engine(ENGINE *engine)
void rand_cleanup_int(void)
{
const RAND_METHOD *meth = RAND_get_rand_method();
const RAND_METHOD *meth = default_RAND_meth;
if (meth && meth->cleanup)
meth->cleanup();
RAND_set_rand_method(NULL);