aboutsummaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authormvel <mvel@yandex-team.com>2025-02-13 22:50:57 +0300
committermvel <mvel@yandex-team.com>2025-02-13 23:19:00 +0300
commit413789ea641bd0a8832454d4940ee8ef81e9a84e (patch)
tree5c4147b5cb46fe43f9cfc170d5179d4fc75a8618 /contrib
parent1f4d6dae736f8313b8ddcad0a72d336cd2901d90 (diff)
downloadydb-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')
-rw-r--r--contrib/libs/poco/Crypto/include/Poco/Crypto/OpenSSLInitializer.h20
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();