Skip to content

Commit a4ef9fd

Browse files
mvelblinkov
authored andcommitted
[contrib/poco] Disable thread sanitizer instrumentation on initialize and uninitialize
Чисто формально инициализация указателя мьютексов не атомарна, факт. Чинить это более красиво можно, но нужно ли? Пример падения под санитайзером ``` raise () /lib/x86_64-linux-gnu/libc.so.6 abort () /lib/x86_64-linux-gnu/libc.so.6 ___interceptor_abort (fake=2) /-S/contrib/libs/clang18-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp +1915 __sanitizer::Abort () /-S/contrib/libs/clang18-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp +143 __sanitizer::Die () /-S/contrib/libs/clang18-rt/lib/sanitizer_common/sanitizer_termination.cpp +58 __tsan::OutputReport (thr=0x7fa19c45f000, srep=...) /-S/contrib/libs/clang18-rt/lib/tsan/rtl/tsan_rtl_report.cpp +666 __tsan::ReportRace (thr=0x7fa19c45f000, shadow_mem=<optimized out>, cur=..., old=..., typ0=0) /-S/contrib/libs/clang18-rt/lib/tsan/rtl/tsan_rtl_report.cpp +822 Poco::Crypto::OpenSSLInitializer::initialize () /-S/contrib/libs/poco/Crypto/src/OpenSSLInitializer.cpp +101 Poco::Crypto::OpenSSLInitializer::OpenSSLInitializer (this=<optimized out>) /-S/contrib/libs/poco/Crypto/src/OpenSSLInitializer.cpp +67 Poco::Crypto::CipherKeyImpl::CipherKeyImpl (this=0x721c00aa95f0, name=<error reading variable: Cannot access memory at address 0x72102d2b53c0>, key=..., iv=...) /-S/contrib/libs/poco/Crypto/src/CipherKeyImpl.cpp +57 Poco::Crypto::CipherKey::CipherKey (this=0x7f98e9ef3df8, name=<error reading variable: Cannot access memory at address 0x72102d2b53c0>, key=std::__y1::vector (length=32, capacity=32) = {...}, iv=std::__y1::vector (length=32, capacity=32) = {...}) /-S/contrib/libs/poco/Crypto/src/CipherKey.cpp +33 yabs::AesEncrypt (data=..., length=length@entry=yabs::AES_128, aesKey=std::__y1::vector (length=32, capacity=32) = {...}, initVector=std::__y1::vector (length=32, capacity=32) = {...}, encoding=encoding@entry=Poco::Crypto::Cipher::ENC_BASE64) /-S/yabs/server/libs/crypt/crypt.cpp +59 ProcessStatModeOnStat (b=b@entry=0x727000128990, context=...) /-S/yabs/server/libs/count/count.cpp +1750 yabs_handler_stat_count (b=0x727000128990) /-S/yabs/server/libs/handlers/stat/handler_count.cpp +14 ... ``` commit_hash:ea00d166a03e0d46cc2de9bf7ed8be549e105e20
1 parent e2acc46 commit a4ef9fd

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

contrib/libs/poco/Crypto/include/Poco/Crypto/OpenSSLInitializer.h

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,16 @@
2828
#endif
2929

3030

31+
#ifndef POCO_CRYPT_NO_SANITIZE_THREAD
32+
#define POCO_CRYPT_NO_SANITIZE_THREAD
33+
#if defined(__has_feature)
34+
#if __has_feature(thread_sanitizer)
35+
#undef POCO_CRYPT_NO_SANITIZE_THREAD
36+
#define POCO_CRYPT_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread))
37+
#endif
38+
#endif
39+
#endif
40+
3141
extern "C"
3242
{
3343
struct CRYPTO_dynlock_value
@@ -50,14 +60,14 @@ class Crypto_API OpenSSLInitializer
5060
public:
5161
OpenSSLInitializer();
5262
/// Automatically initialize OpenSSL on startup.
53-
63+
5464
~OpenSSLInitializer();
5565
/// Automatically shut down OpenSSL on exit.
56-
57-
static void initialize();
66+
67+
POCO_CRYPT_NO_SANITIZE_THREAD static void initialize();
5868
/// Initializes the OpenSSL machinery.
5969

60-
static void uninitialize();
70+
POCO_CRYPT_NO_SANITIZE_THREAD static void uninitialize();
6171
/// Shuts down the OpenSSL machinery.
6272

6373
static bool isFIPSEnabled();
@@ -71,7 +81,7 @@ class Crypto_API OpenSSLInitializer
7181
{
7282
SEEDSIZE = 256
7383
};
74-
84+
7585
// OpenSSL multithreading support
7686
static void lock(int mode, int n, const char* file, int line);
7787
static unsigned long id();

0 commit comments

Comments
 (0)