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:38:37 +0000 (10:38 +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)
(cherry picked from commit 5006b37b31c5a520c3065048bd8aba8cc3ff128d)

crypto/rand/rand_lib.c

index 238712671ba3d4ba568e0ef1ab0c5e5210dfae00..60c1b17fba9790604b2f86ece8b4151ba1b48004 100644 (file)
@@ -79,7 +79,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);