Add a warning stipulating how things should be coded in ossl_init_base
authorRichard Levitte <levitte@openssl.org>
Mon, 14 Nov 2016 23:58:51 +0000 (00:58 +0100)
committerRichard Levitte <levitte@openssl.org>
Tue, 15 Nov 2016 00:27:26 +0000 (01:27 +0100)
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/1922)

crypto/init.c

index 01619bc129b9506270973e3a96e87f380c72af08..3f9111940785a1a444009e7242752541b1b1735a 100644 (file)
@@ -79,6 +79,13 @@ DEFINE_RUN_ONCE_STATIC(ossl_init_base)
     if ((init_lock = CRYPTO_THREAD_lock_new()) == NULL)
         return 0;
     OPENSSL_cpuid_setup();
     if ((init_lock = CRYPTO_THREAD_lock_new()) == NULL)
         return 0;
     OPENSSL_cpuid_setup();
+
+    /*
+     * BIG FAT WARNING!
+     * Everything needed to be initialized in this function before threads
+     * come along MUST happen before base_inited is set to 1, or we will
+     * see race conditions.
+     */
     base_inited = 1;
 
 #if !defined(OPENSSL_NO_DSO) && !defined(OPENSSL_USE_NODELETE)
     base_inited = 1;
 
 #if !defined(OPENSSL_NO_DSO) && !defined(OPENSSL_USE_NODELETE)