Merge pull request #65396 from rschu1ze/revert-obsolete-openssl-fix

Move a leaksan suppression from Poco into OpenSSL
This commit is contained in:
Robert Schulze 2024-06-19 20:47:28 +00:00 committed by GitHub
commit ddb1ebe66a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 8 additions and 28 deletions

View File

@ -23,9 +23,6 @@
#include <openssl/conf.h> #include <openssl/conf.h>
#endif #endif
#if __has_feature(address_sanitizer)
#include <sanitizer/lsan_interface.h>
#endif
using Poco::RandomInputStream; using Poco::RandomInputStream;
using Poco::Thread; using Poco::Thread;
@ -70,18 +67,12 @@ void OpenSSLInitializer::initialize()
SSL_library_init(); SSL_library_init();
SSL_load_error_strings(); SSL_load_error_strings();
OpenSSL_add_all_algorithms(); OpenSSL_add_all_algorithms();
char seed[SEEDSIZE]; char seed[SEEDSIZE];
RandomInputStream rnd; RandomInputStream rnd;
rnd.read(seed, sizeof(seed)); rnd.read(seed, sizeof(seed));
{ RAND_seed(seed, SEEDSIZE);
# if __has_feature(address_sanitizer)
/// Leak sanitizer (part of address sanitizer) thinks that a few bytes of memory in OpenSSL are allocated during but never released.
__lsan::ScopedDisabler lsan_disabler;
#endif
RAND_seed(seed, SEEDSIZE);
}
int nMutexes = CRYPTO_num_locks(); int nMutexes = CRYPTO_num_locks();
_mutexes = new Poco::FastMutex[nMutexes]; _mutexes = new Poco::FastMutex[nMutexes];
CRYPTO_set_locking_callback(&OpenSSLInitializer::lock); CRYPTO_set_locking_callback(&OpenSSLInitializer::lock);
@ -89,8 +80,8 @@ void OpenSSLInitializer::initialize()
// https://sourceforge.net/p/poco/bugs/110/ // https://sourceforge.net/p/poco/bugs/110/
// //
// From http://www.openssl.org/docs/crypto/threads.html : // From http://www.openssl.org/docs/crypto/threads.html :
// "If the application does not register such a callback using CRYPTO_THREADID_set_callback(), // "If the application does not register such a callback using CRYPTO_THREADID_set_callback(),
// then a default implementation is used - on Windows and BeOS this uses the system's // then a default implementation is used - on Windows and BeOS this uses the system's
// default thread identifying APIs" // default thread identifying APIs"
CRYPTO_set_id_callback(&OpenSSLInitializer::id); CRYPTO_set_id_callback(&OpenSSLInitializer::id);
CRYPTO_set_dynlock_create_callback(&OpenSSLInitializer::dynlockCreate); CRYPTO_set_dynlock_create_callback(&OpenSSLInitializer::dynlockCreate);
@ -109,7 +100,7 @@ void OpenSSLInitializer::uninitialize()
CRYPTO_set_locking_callback(0); CRYPTO_set_locking_callback(0);
CRYPTO_set_id_callback(0); CRYPTO_set_id_callback(0);
delete [] _mutexes; delete [] _mutexes;
CONF_modules_free(); CONF_modules_free();
} }
} }

2
contrib/openssl vendored

@ -1 +1 @@
Subproject commit e0d6ae2bf93cf6dc26bb86aa39992bc6a410869a Subproject commit 277de2ba202af4eb2291b363456d32ff0960e559

View File

@ -30,10 +30,6 @@
#include <base/sleep.h> #include <base/sleep.h>
#ifdef ADDRESS_SANITIZER
#include <sanitizer/lsan_interface.h>
#endif
namespace ProfileEvents namespace ProfileEvents
{ {
extern const Event S3WriteRequestsErrors; extern const Event S3WriteRequestsErrors;
@ -880,14 +876,7 @@ void ClientCacheRegistry::clearCacheForAll()
ClientFactory::ClientFactory() ClientFactory::ClientFactory()
{ {
aws_options = Aws::SDKOptions{}; aws_options = Aws::SDKOptions{};
{ Aws::InitAPI(aws_options);
#ifdef ADDRESS_SANITIZER
/// Leak sanitizer (part of address sanitizer) thinks that memory in OpenSSL (called by AWS SDK) is allocated but not
/// released. Actually, the memory is released at the end of the program (ClientFactory is a singleton, see the dtor).
__lsan::ScopedDisabler lsan_disabler;
#endif
Aws::InitAPI(aws_options);
}
Aws::Utils::Logging::InitializeAWSLogging(std::make_shared<AWSLogger>(false)); Aws::Utils::Logging::InitializeAWSLogging(std::make_shared<AWSLogger>(false));
Aws::Http::SetHttpClientFactory(std::make_shared<PocoHTTPClientFactory>()); Aws::Http::SetHttpClientFactory(std::make_shared<PocoHTTPClientFactory>());
} }