Avoid unconditional store in CRYPTO_malloc.
authorknekritz <knekritz@fb.com>
Tue, 6 Mar 2018 18:21:49 +0000 (13:21 -0500)
committerRich Salz <rsalz@openssl.org>
Tue, 6 Mar 2018 18:23:41 +0000 (13:23 -0500)
Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/5372)
(cherry picked from commit 41aede863b76202347c2d5e2c2666428084f9203)

crypto/mem.c

index bc35132fc7b45b735dea342ab6fd9eb10a538221..7ec7a80cd0f582b3e3b5f4d30c33800c0700df53 100644 (file)
@@ -78,7 +78,14 @@ void *CRYPTO_malloc(size_t num, const char *file, int line)
     if (num == 0)
         return NULL;
 
-    allow_customize = 0;
+    if (allow_customize) {
+        /*
+         * Disallow customization after the first allocation. We only set this
+         * if necessary to avoid a store to the same cache line on every
+         * allocation.
+         */
+        allow_customize = 0;
+    }
 #ifndef OPENSSL_NO_CRYPTO_MDEBUG
     if (call_malloc_debug) {
         CRYPTO_mem_debug_malloc(NULL, num, 0, file, line);
@@ -117,7 +124,6 @@ void *CRYPTO_realloc(void *str, size_t num, const char *file, int line)
         return NULL;
     }
 
-    allow_customize = 0;
 #ifndef OPENSSL_NO_CRYPTO_MDEBUG
     if (call_malloc_debug) {
         void *ret;