diff options
author | mvel <mvel@yandex-team.com> | 2025-02-13 22:50:57 +0300 |
---|---|---|
committer | mvel <mvel@yandex-team.com> | 2025-02-13 23:19:00 +0300 |
commit | 413789ea641bd0a8832454d4940ee8ef81e9a84e (patch) | |
tree | 5c4147b5cb46fe43f9cfc170d5179d4fc75a8618 /contrib/libs | |
parent | 1f4d6dae736f8313b8ddcad0a72d336cd2901d90 (diff) | |
download | ydb-413789ea641bd0a8832454d4940ee8ef81e9a84e.tar.gz |
[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
Diffstat (limited to 'contrib/libs')
-rw-r--r-- | contrib/libs/poco/Crypto/include/Poco/Crypto/OpenSSLInitializer.h | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/contrib/libs/poco/Crypto/include/Poco/Crypto/OpenSSLInitializer.h b/contrib/libs/poco/Crypto/include/Poco/Crypto/OpenSSLInitializer.h index 1fbd7d3a2c..694406acc9 100644 --- a/contrib/libs/poco/Crypto/include/Poco/Crypto/OpenSSLInitializer.h +++ b/contrib/libs/poco/Crypto/include/Poco/Crypto/OpenSSLInitializer.h @@ -28,6 +28,16 @@ #endif +#ifndef POCO_CRYPT_NO_SANITIZE_THREAD + #define POCO_CRYPT_NO_SANITIZE_THREAD + #if defined(__has_feature) + #if __has_feature(thread_sanitizer) + #undef POCO_CRYPT_NO_SANITIZE_THREAD + #define POCO_CRYPT_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread)) + #endif + #endif +#endif + extern "C" { struct CRYPTO_dynlock_value @@ -50,14 +60,14 @@ class Crypto_API OpenSSLInitializer public: OpenSSLInitializer(); /// Automatically initialize OpenSSL on startup. - + ~OpenSSLInitializer(); /// Automatically shut down OpenSSL on exit. - - static void initialize(); + + POCO_CRYPT_NO_SANITIZE_THREAD static void initialize(); /// Initializes the OpenSSL machinery. - static void uninitialize(); + POCO_CRYPT_NO_SANITIZE_THREAD static void uninitialize(); /// Shuts down the OpenSSL machinery. static bool isFIPSEnabled(); @@ -71,7 +81,7 @@ protected: { SEEDSIZE = 256 }; - + // OpenSSL multithreading support static void lock(int mode, int n, const char* file, int line); static unsigned long id(); |