Fix the init cleanup order
There are internal dependencies between the various cleanup functions. This re-orders things to try and get that right. Reviewed-by: Richard Levitte <levitte@openssl.org>
This commit is contained in:
parent
b10cdcce00
commit
58a8fc25d7
1 changed files with 21 additions and 14 deletions
|
@ -460,25 +460,34 @@ void OPENSSL_cleanup(void)
|
|||
CRYPTO_THREAD_cleanup_local(&threadstopkey);
|
||||
|
||||
#ifdef OPENSSL_INIT_DEBUG
|
||||
fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
|
||||
"RAND_cleanup()\n");
|
||||
fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
|
||||
"CONF_modules_free()\n");
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
|
||||
"ENGINE_cleanup()\n");
|
||||
#endif
|
||||
fprintf(stderr, "OPENSSL_INIT: OPENSSL_INIT_library_stop: "
|
||||
fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
|
||||
"CRYPTO_cleanup_all_ex_data()\n");
|
||||
fprintf(stderr, "OPENSSL_INIT: OPENSSL_INIT_library_stop: "
|
||||
fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
|
||||
"BIO_sock_cleanup()\n");
|
||||
fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
|
||||
"EVP_cleanup()\n");
|
||||
fprintf(stderr, "OPENSSL_INIT: OPENSSL_INIT_library_stop: "
|
||||
"CONF_modules_free()\n");
|
||||
fprintf(stderr, "OPENSSL_INIT: OPENSSL_INIT_library_stop: "
|
||||
"RAND_cleanup()\n");
|
||||
|
||||
fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
|
||||
"OBJ_cleanup()\n");
|
||||
#endif
|
||||
/*
|
||||
* Note that cleanup order is important.
|
||||
* For example, ENGINEs use CRYPTO_EX_DATA and therefore, must be cleaned up
|
||||
* before the ex data handlers are wiped in CRYPTO_cleanup_all_ex_data().
|
||||
*/
|
||||
/*
|
||||
* Note that cleanup order is important:
|
||||
* - RAND_cleanup could call an ENINGE's RAND cleanup function so must be
|
||||
* called before ENGINE_cleanup()
|
||||
* - ENGINEs use CRYPTO_EX_DATA and therefore, must be cleaned up
|
||||
* before the ex data handlers are wiped in CRYPTO_cleanup_all_ex_data().
|
||||
* - CONF_modules_free() can end up in ENGINE code so must be called before
|
||||
* ENGINE_cleanup()
|
||||
*/
|
||||
RAND_cleanup();
|
||||
CONF_modules_free();
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
ENGINE_cleanup();
|
||||
#endif
|
||||
|
@ -486,8 +495,6 @@ void OPENSSL_cleanup(void)
|
|||
BIO_sock_cleanup();
|
||||
EVP_cleanup();
|
||||
OBJ_cleanup();
|
||||
CONF_modules_free();
|
||||
RAND_cleanup();
|
||||
base_inited = 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue