Avoid a race condition in loading config settings
A race condition can occur when sending config settings to OPENSSL_INIT_crypto_library_start() Reviewed-by: Richard Levitte <levitte@openssl.org>
This commit is contained in:
@@ -679,13 +679,17 @@ void OPENSSL_INIT_crypto_library_start(uint64_t opts,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (opts & OPENSSL_INIT_LOAD_CONFIG) {
|
if (opts & OPENSSL_INIT_LOAD_CONFIG) {
|
||||||
|
CRYPTO_w_lock(CRYPTO_LOCK_INIT);
|
||||||
if (settings != NULL) {
|
if (settings != NULL) {
|
||||||
const OPENSSL_INIT_SETTINGS *curr;
|
const OPENSSL_INIT_SETTINGS *curr;
|
||||||
curr = ossl_init_get_setting(settings,
|
curr = ossl_init_get_setting(settings,
|
||||||
OPENSSL_INIT_SET_CONF_FILENAME);
|
OPENSSL_INIT_SET_CONF_FILENAME);
|
||||||
config_filename = curr == NULL ? NULL : curr->value.type_string;
|
config_filename = (curr == NULL) ? NULL : curr->value.type_string;
|
||||||
|
} else {
|
||||||
|
config_filename = NULL;
|
||||||
}
|
}
|
||||||
ossl_init_once_run(&config, ossl_init_config);
|
ossl_init_once_run(&config, ossl_init_config);
|
||||||
|
CRYPTO_w_unlock(CRYPTO_LOCK_INIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opts & OPENSSL_INIT_ASYNC) {
|
if (opts & OPENSSL_INIT_ASYNC) {
|
||||||
|
Reference in New Issue
Block a user