X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=crypto%2Ferr%2Ferr.c;h=c0bdbb8933549399bb3cc910b09fc998e2cadf23;hp=bd9e062fd1bee03a8f1a0260945e640855944981;hb=aef84bb4efbddfd95d042f3f5f1d362ed7d4faeb;hpb=ea7df7ea449ef85a163fde917906e6e3da9388e5 diff --git a/crypto/err/err.c b/crypto/err/err.c index bd9e062fd1..c0bdbb8933 100644 --- a/crypto/err/err.c +++ b/crypto/err/err.c @@ -667,6 +667,14 @@ ERR_STATE *ERR_get_state(void) if (!RUN_ONCE(&err_init, err_do_init)) return NULL; + /* + * If base OPENSSL_init_crypto() hasn't been called yet, be sure to call + * it now to avoid state to be doubly allocated and thereby leak memory. + * Needed on any platform that doesn't define OPENSSL_USE_NODELETE. + */ + if (!OPENSSL_init_crypto(0, NULL)) + return NULL; + state = CRYPTO_THREAD_get_local(&err_thread_local); if (state == NULL) {