mirror of
https://github.com/openssl/openssl.git
synced 2025-01-05 00:33:41 +08:00
If we've not been inited don't deinit
If you call an explicit deinit when we've not been inited then a seg fault can occur. We should check that we've been inited before attempting to deinit. Reviewed-by: Rich Salz <rsalz@openssl.org>
This commit is contained in:
parent
740b2b9a6c
commit
deca5df2fb
@ -537,6 +537,10 @@ void OPENSSL_INIT_library_stop(void)
|
|||||||
{
|
{
|
||||||
OPENSSL_INIT_STOP *currhandler, *lasthandler;
|
OPENSSL_INIT_STOP *currhandler, *lasthandler;
|
||||||
|
|
||||||
|
/* If we've not been inited then no need to deinit */
|
||||||
|
if (!base_inited)
|
||||||
|
return;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Thread stop may not get automatically called by the thread library for
|
* Thread stop may not get automatically called by the thread library for
|
||||||
* the very last thread in some situations, so call it directly.
|
* the very last thread in some situations, so call it directly.
|
||||||
@ -613,24 +617,22 @@ void OPENSSL_INIT_library_stop(void)
|
|||||||
OPENSSL_INIT_ONCE_DYNAMIC_INIT(&load_crypto_strings);
|
OPENSSL_INIT_ONCE_DYNAMIC_INIT(&load_crypto_strings);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (base_inited) {
|
|
||||||
#ifdef OPENSSL_INIT_DEBUG
|
#ifdef OPENSSL_INIT_DEBUG
|
||||||
fprintf(stderr, "OPENSSL_INIT: OPENSSL_INIT_library_stop: "
|
fprintf(stderr, "OPENSSL_INIT: OPENSSL_INIT_library_stop: "
|
||||||
"CRYPTO_cleanup_all_ex_data()\n");
|
"CRYPTO_cleanup_all_ex_data()\n");
|
||||||
fprintf(stderr, "OPENSSL_INIT: OPENSSL_INIT_library_stop: "
|
fprintf(stderr, "OPENSSL_INIT: OPENSSL_INIT_library_stop: "
|
||||||
"EVP_cleanup()\n");
|
"EVP_cleanup()\n");
|
||||||
fprintf(stderr, "OPENSSL_INIT: OPENSSL_INIT_library_stop: "
|
fprintf(stderr, "OPENSSL_INIT: OPENSSL_INIT_library_stop: "
|
||||||
"CONF_modules_free()\n");
|
"CONF_modules_free()\n");
|
||||||
fprintf(stderr, "OPENSSL_INIT: OPENSSL_INIT_library_stop: "
|
fprintf(stderr, "OPENSSL_INIT: OPENSSL_INIT_library_stop: "
|
||||||
"RAND_cleanup()\n");
|
"RAND_cleanup()\n");
|
||||||
#endif
|
#endif
|
||||||
CRYPTO_cleanup_all_ex_data();
|
CRYPTO_cleanup_all_ex_data();
|
||||||
EVP_cleanup();
|
EVP_cleanup();
|
||||||
CONF_modules_free();
|
CONF_modules_free();
|
||||||
RAND_cleanup();
|
RAND_cleanup();
|
||||||
base_inited = 0;
|
base_inited = 0;
|
||||||
OPENSSL_INIT_ONCE_DYNAMIC_INIT(&base);
|
OPENSSL_INIT_ONCE_DYNAMIC_INIT(&base);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const OPENSSL_INIT_SETTINGS *ossl_init_get_setting(
|
static const OPENSSL_INIT_SETTINGS *ossl_init_get_setting(
|
||||||
|
Loading…
Reference in New Issue
Block a user