fix(OpenSSLInitializer): fix provider unloading (#3567)

This commit is contained in:
Alex Fabijanic
2022-04-22 22:24:54 +02:00
parent 3b3747eb40
commit 484eed7e9b
2 changed files with 10 additions and 8 deletions

View File

@@ -24,6 +24,7 @@
#include <openssl/crypto.h>
#if OPENSSL_VERSION_NUMBER >= 0x30000000L
#include <openssl/provider.h>
#include <atomic>
#endif
#if defined(OPENSSL_FIPS) && OPENSSL_VERSION_NUMBER < 0x010001000L
#include <openssl/fips.h>
@@ -91,8 +92,8 @@ private:
#endif
#if OPENSSL_VERSION_NUMBER >= 0x30000000L
static OSSL_PROVIDER* _defaultProvider;
static OSSL_PROVIDER* _legacyProvider;
static std::atomic<OSSL_PROVIDER*> _defaultProvider;
static std::atomic<OSSL_PROVIDER*> _legacyProvider;
#endif
};

View File

@@ -66,8 +66,8 @@ Poco::FastMutex* OpenSSLInitializer::_mutexes(0);
#endif
#if OPENSSL_VERSION_NUMBER >= 0x30000000L
OSSL_PROVIDER* OpenSSLInitializer::_defaultProvider(0);
OSSL_PROVIDER* OpenSSLInitializer::_legacyProvider(0);
std::atomic<OSSL_PROVIDER*> OpenSSLInitializer::_defaultProvider(0);
std::atomic<OSSL_PROVIDER*> OpenSSLInitializer::_legacyProvider(0);
#endif
@@ -159,13 +159,14 @@ void OpenSSLInitializer::uninitialize()
#endif
#if OPENSSL_VERSION_NUMBER >= 0x30000000L
if (_defaultProvider)
OSSL_PROVIDER* provider = nullptr;
if ((provider = _defaultProvider.exchange(nullptr)))
{
OSSL_PROVIDER_unload(_defaultProvider);
OSSL_PROVIDER_unload(provider);
}
if (_legacyProvider)
if ((provider = _legacyProvider.exchange(nullptr)))
{
OSSL_PROVIDER_unload(_legacyProvider);
OSSL_PROVIDER_unload(provider);
}
#endif
}