使用 -fsanitize=address 在 FreeBSD(clang9 和 clang11)上编译时,Openssl 卡在 SSL_library_init()

Openssl stucks on SSL_library_init() when compiled on FreeBSD (clang9 and clang11) when using -fsanitize=address

FreeBSD 13(OpenSSL 1.1.1k-freebsd 2021 年 3 月 25 日)上启动 Openssl 时我的软件卡住了,同时使用 -fsanitize=addressclang11 中,同样的问题发生在 clang9.

问题发生在:

重现问题:

#include <openssl/ssl.h>

int main(int argc, char *argv[]) {
    SSL_library_init();
    return EXIT_SUCCESS;
}

然后编译执行:

clang  -lssl -lcrypto -fsanitize=address -o test test.c && ./test

编译正常,但程序卡在 SSL_library_init() 使用 100% of CPU。一旦 -fsanitize=address 删除 一切都按预期工作。

将OP的解决方案移至答案区。

我回溯了该错误,这不是 OpenSSL 错误,我已确认这是评论中指出的 LLVM 错误:

(gdb) bt
#0  0x000000000027ffa7 in wrapped_qsort_compar (a=0x80087ed60, b=0x80087eef0)
    at /usr/src/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc:9741
#1  0x0000000800d6e974 in qsort () from /lib/libc.so.7
#2  0x0000000000280083 in __interceptor_qsort (base=<optimized out>, nmemb=44, size=80, 
    compar=<optimized out>)
    at /usr/src/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc:9761
#3  0x0000000800d6f846 in qsort () from /lib/libc.so.7
#4  0x0000000000280083 in __interceptor_qsort (base=<optimized out>, nmemb=164, size=80, 
    compar=<optimized out>)
    at /usr/src/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc:9761
#5  0x000000080082b6af in ?? () from /usr/lib/libssl.so.111
#6  0x000000080083120e in ?? () from /usr/lib/libssl.so.111
#7  0x0000000800835f39 in ?? () from /usr/lib/libssl.so.111
#8  0x0000000800b8fe23 in pthread_once () from /lib/libthr.so.3
#9  0x00000008009a1019 in CRYPTO_THREAD_run_once () from /lib/libcrypto.so.111
#10 0x0000000800835ce2 in OPENSSL_init_ssl () from /usr/lib/libssl.so.111
#11 0x00000000002b37a9 in main ()
(gdb) 
```