In rand_cleanup_int(), don't go creating a default method
authorRichard Levitte <levitte@openssl.org>
Thu, 6 Apr 2017 08:24:55 +0000 (10:24 +0200)
committerRichard Levitte <levitte@openssl.org>
Thu, 6 Apr 2017 08:28:43 +0000 (10:28 +0200)
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)

crypto/rand/rand_lib.c

index fc47dc9..ad45250 100644 (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);