crypto/cryptlib.c: resolve possible race in OPENSSL_isservice.
authorAndy Polyakov <appro@openssl.org>
Fri, 20 Jul 2018 11:19:11 +0000 (13:19 +0200)
committerAndy Polyakov <appro@openssl.org>
Wed, 25 Jul 2018 14:37:25 +0000 (16:37 +0200)
Reviewed-by: Kurt Roeckx <kurt@roeckx.be>
(Merged from https://github.com/openssl/openssl/pull/6752)

crypto/cryptlib.c

index ad727ed..a7894dd 100644 (file)
@@ -205,10 +205,14 @@ int OPENSSL_isservice(void)
 
     if (_OPENSSL_isservice.p == NULL) {
         HANDLE mod = GetModuleHandle(NULL);
+        FARPROC f;
+
         if (mod != NULL)
-            _OPENSSL_isservice.f = GetProcAddress(mod, "_OPENSSL_isservice");
-        if (_OPENSSL_isservice.p == NULL)
+            f = GetProcAddress(mod, "_OPENSSL_isservice");
+        if (f == NULL)
             _OPENSSL_isservice.p = (void *)-1;
+        else
+            _OPENSSL_isservice.f = f;
     }
 
     if (_OPENSSL_isservice.p != (void *)-1)