From d13f67294f182b87deb6d144439449a46c21b6c1 Mon Sep 17 00:00:00 2001 From: Alexander Tokmakov Date: Fri, 6 Mar 2020 01:11:56 +0300 Subject: [PATCH 1/4] patch for msan --- crypto/cryptlib.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/crypto/cryptlib.c b/crypto/cryptlib.c index bc29a3b583d63..3561b32c7fb81 100644 --- a/crypto/cryptlib.c +++ b/crypto/cryptlib.c @@ -101,6 +101,16 @@ void OPENSSL_cpuid_setup(void) IA32CAP vec; const variant_char *env; +#if defined(__has_feature) +# if __has_feature(memory_sanitizer) + /// This function is called from .init section before memory sanitizer mmaps shadow memory. + /// Manually call __msan_init() to initialize it. + /// Otherwise, program will crash with segmentation fault when thying access `trigger`, + /// because its address was replaced with some not mapped address. + __msan_init(); +# endif +#endif + if (trigger) return; From af43419be8ae231ee7a7f120b9e8083349ef58f9 Mon Sep 17 00:00:00 2001 From: Alexander Tokmakov Date: Fri, 6 Mar 2020 17:06:08 +0300 Subject: [PATCH 2/4] add workaround for clang-8 --- crypto/cryptlib.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/crypto/cryptlib.c b/crypto/cryptlib.c index 3561b32c7fb81..d29f7037bb8b8 100644 --- a/crypto/cryptlib.c +++ b/crypto/cryptlib.c @@ -107,7 +107,12 @@ void OPENSSL_cpuid_setup(void) /// Manually call __msan_init() to initialize it. /// Otherwise, program will crash with segmentation fault when thying access `trigger`, /// because its address was replaced with some not mapped address. +#if __clang_major__ >= 9 __msan_init(); +#else + /// Workaround for "error in backend: Sanitizer interface function redefined" in clang-8 + __asm__ __volatile__("callq __msan_init": : :"memory", "cc", "rax", "rcx", "rdx", "rsi", "rdi", "r8", "r9", "r10", "r11", "st"); +#endif # endif #endif From f9c3470445706750c9a577f620abb172c043f25a Mon Sep 17 00:00:00 2001 From: Alexander Tokmakov Date: Fri, 6 Mar 2020 18:11:44 +0300 Subject: [PATCH 3/4] add clobbers for sse registers --- crypto/cryptlib.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/crypto/cryptlib.c b/crypto/cryptlib.c index d29f7037bb8b8..95eb63c33e5cf 100644 --- a/crypto/cryptlib.c +++ b/crypto/cryptlib.c @@ -111,7 +111,14 @@ void OPENSSL_cpuid_setup(void) __msan_init(); #else /// Workaround for "error in backend: Sanitizer interface function redefined" in clang-8 - __asm__ __volatile__("callq __msan_init": : :"memory", "cc", "rax", "rcx", "rdx", "rsi", "rdi", "r8", "r9", "r10", "r11", "st"); + __asm__ __volatile__("callq __msan_init": : : + "memory", "cc", + "rax", "rcx", "rdx", "rsi", "rdi", + "r8", "r9", "r10", "r11", "st", + "mmx0", "mmx1", "mmx2", "mmx3", "mmx4", "mmx5", "mmx6", "mmx7", + "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15" + ); #endif # endif #endif From 09abfe0dad3eee6debd321701f4607680dc4b9bb Mon Sep 17 00:00:00 2001 From: Alexander Tokmakov Date: Fri, 6 Mar 2020 21:07:54 +0300 Subject: [PATCH 4/4] fix --- crypto/cryptlib.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crypto/cryptlib.c b/crypto/cryptlib.c index 95eb63c33e5cf..e9a646bbd40a5 100644 --- a/crypto/cryptlib.c +++ b/crypto/cryptlib.c @@ -115,7 +115,7 @@ void OPENSSL_cpuid_setup(void) "memory", "cc", "rax", "rcx", "rdx", "rsi", "rdi", "r8", "r9", "r10", "r11", "st", - "mmx0", "mmx1", "mmx2", "mmx3", "mmx4", "mmx5", "mmx6", "mmx7", + "mm0", "mm1", "mm2", "mm3", "mm4", "mm5", "mm6", "mm7", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7", "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15" );