I'm trying to instrument a third party library being built from sources. I'm using Clang 7.0.1 on Fedora 29. Clang takes -fsanitize=memory. The link step is driven through the compiler and uses the following command:
clang -shared -Wl,-soname,libz.so.1,--version-script,zlib.map -g2 -O2 -fsanitize=memory -fno-omit-frame-pointer -march=native -fPIC -pthread -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -o libz.so.1.2.11 adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo -lc -L/var/sanitize/lib64 -fsanitize=memory -Wl,-R,/var/sanitize/lib64 -Wl,--enable-new-dtags
Later, I build OpenSSL with the Sanitizer:
gmake[2]: Entering directory '/home/build/openssl-1.0.2r'
[ -z "" ] || clang -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -g2 -O2 -I/var/sanitize/include -DNDEBUG -g2 -O2 -fsanitize=memory -fno-omit-frame-pointer -march=native -fPIC -pthread -fsanitize=memory -DPEDANTIC -m64 -DL_ENDIAN -O3 -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wno-language-extension-token -Qunused-arguments -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -Iinclude \
-DFINGERPRINT_PREMAIN_DSO_LOAD -o fips_premain_dso \
fips_premain.c fipscanister.o \
libcrypto.a -lmsan -ldl -lpthread -L/var/sanitize/lib64 -Wl,-R,/var/sanitize/lib64 -Wl,--enable-new-dtags -Wl,-R,/var/sanitize/lib64 -Wl,--enable-new-dtags -ldl
And then attempt to run the 'make check':
gmake[3]: Entering directory '/home/build/openssl-1.0.2r'
gmake[4]: Entering directory '/home/build/openssl-1.0.2r'
clang: symbol lookup error: /var/sanitize/lib64/libz.so.1: undefined symbol: __msan_va_arg_overflow_size_tls
When I check libz.so.1 dependencies I don't see msan:
$ ls /var/sanitize/lib64
libbz2.a libz.a libz.so libz.so.1 libz.so.1.2.11 pkgconfig
$ ldd /var/sanitize/lib64/libz.so.1
linux-vdso.so.1 (0x00007ffd495db000)
libc.so.6 => /lib64/libc.so.6 (0x00007f52e6aff000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f52e6add000)
/lib64/ld-linux-x86-64.so.2 (0x00007f52e6d25000)
I don't see a reference to the Msan library.
What am I doing wrong?