I cannot figure out how to get the blacklist in clang to work on a third party library. Specifically I am having trouble with libpq
.
<code>Uninitialized bytes in __interceptor_getaddrinfo at offset 9 inside [0x701000000110, 10)
==32548==WARNING: MemorySanitizer: use-of-uninitialized-value
#0 0x7faf417cd527 in PQconnectPoll (/lib/x86_64-linux-gnu/libpq.so.5+0x11527)
#1 0x7faf417cea22 (/lib/x86_64-linux-gnu/libpq.so.5+0x12a22)
#2 0x7faf417d204b in PQconnectStart (/lib/x86_64-linux-gnu/libpq.so.5+0x1604b)
#3 0x7faf417d2082 in PQconnectdb (/lib/x86_64-linux-gnu/libpq.so.5+0x16082)
#4 0x4d3432 in main /src/core.c:340:10
#5 0x7faf4134e082 in __libc_start_main /build/glibc-LcI20x/glibc-2.31/csu/../csu/libc-start.c:308:16
#6 0x41d7cd in _start (/bin/client+0x41d7cd)
Uninitialized value was created by a heap allocation
#0 0x4299ad in malloc (/bin/client+0x4299ad)
#1 0x7faf417cabe8 (/lib/x86_64-linux-gnu/libpq.so.5+0xebe8)
#2 0x7faf417d0675 (/lib/x86_64-linux-gnu/libpq.so.5+0x14675)
#3 0x7faf417d203f in PQconnectStart (/lib/x86_64-linux-gnu/libpq.so.5+0x1603f)
#4 0x7faf417d2082 in PQconnectdb (/lib/x86_64-linux-gnu/libpq.so.5+0x16082)
#5 0x4d3432 in main /src/core.c:340:10
#6 0x7faf4134e082 in __libc_start_main /build/glibc-LcI20x/glibc-2.31/csu/../csu/libc-start.c:308:16
SUMMARY: MemorySanitizer: use-of-uninitialized-value (/lib/x86_64-linux-gnu/libpq.so.5+0x11527) in PQconnectPoll
<code>Uninitialized bytes in __interceptor_getaddrinfo at offset 9 inside [0x701000000110, 10)
==32548==WARNING: MemorySanitizer: use-of-uninitialized-value
#0 0x7faf417cd527 in PQconnectPoll (/lib/x86_64-linux-gnu/libpq.so.5+0x11527)
#1 0x7faf417cea22 (/lib/x86_64-linux-gnu/libpq.so.5+0x12a22)
#2 0x7faf417d204b in PQconnectStart (/lib/x86_64-linux-gnu/libpq.so.5+0x1604b)
#3 0x7faf417d2082 in PQconnectdb (/lib/x86_64-linux-gnu/libpq.so.5+0x16082)
#4 0x4d3432 in main /src/core.c:340:10
#5 0x7faf4134e082 in __libc_start_main /build/glibc-LcI20x/glibc-2.31/csu/../csu/libc-start.c:308:16
#6 0x41d7cd in _start (/bin/client+0x41d7cd)
Uninitialized value was created by a heap allocation
#0 0x4299ad in malloc (/bin/client+0x4299ad)
#1 0x7faf417cabe8 (/lib/x86_64-linux-gnu/libpq.so.5+0xebe8)
#2 0x7faf417d0675 (/lib/x86_64-linux-gnu/libpq.so.5+0x14675)
#3 0x7faf417d203f in PQconnectStart (/lib/x86_64-linux-gnu/libpq.so.5+0x1603f)
#4 0x7faf417d2082 in PQconnectdb (/lib/x86_64-linux-gnu/libpq.so.5+0x16082)
#5 0x4d3432 in main /src/core.c:340:10
#6 0x7faf4134e082 in __libc_start_main /build/glibc-LcI20x/glibc-2.31/csu/../csu/libc-start.c:308:16
SUMMARY: MemorySanitizer: use-of-uninitialized-value (/lib/x86_64-linux-gnu/libpq.so.5+0x11527) in PQconnectPoll
Exiting
</code>
Uninitialized bytes in __interceptor_getaddrinfo at offset 9 inside [0x701000000110, 10)
==32548==WARNING: MemorySanitizer: use-of-uninitialized-value
#0 0x7faf417cd527 in PQconnectPoll (/lib/x86_64-linux-gnu/libpq.so.5+0x11527)
#1 0x7faf417cea22 (/lib/x86_64-linux-gnu/libpq.so.5+0x12a22)
#2 0x7faf417d204b in PQconnectStart (/lib/x86_64-linux-gnu/libpq.so.5+0x1604b)
#3 0x7faf417d2082 in PQconnectdb (/lib/x86_64-linux-gnu/libpq.so.5+0x16082)
#4 0x4d3432 in main /src/core.c:340:10
#5 0x7faf4134e082 in __libc_start_main /build/glibc-LcI20x/glibc-2.31/csu/../csu/libc-start.c:308:16
#6 0x41d7cd in _start (/bin/client+0x41d7cd)
Uninitialized value was created by a heap allocation
#0 0x4299ad in malloc (/bin/client+0x4299ad)
#1 0x7faf417cabe8 (/lib/x86_64-linux-gnu/libpq.so.5+0xebe8)
#2 0x7faf417d0675 (/lib/x86_64-linux-gnu/libpq.so.5+0x14675)
#3 0x7faf417d203f in PQconnectStart (/lib/x86_64-linux-gnu/libpq.so.5+0x1603f)
#4 0x7faf417d2082 in PQconnectdb (/lib/x86_64-linux-gnu/libpq.so.5+0x16082)
#5 0x4d3432 in main /src/core.c:340:10
#6 0x7faf4134e082 in __libc_start_main /build/glibc-LcI20x/glibc-2.31/csu/../csu/libc-start.c:308:16
SUMMARY: MemorySanitizer: use-of-uninitialized-value (/lib/x86_64-linux-gnu/libpq.so.5+0x11527) in PQconnectPoll
Exiting
According to the output summary, there is an unitialized value in libpq
in the PQconnectPoll
. How do I ignore that?
My blacklist:
<code>fun:*PQconnectdb*
fun:*PQconnectPoll*
fun:*PQconnectStart*
src:*libpq*
</code>
fun:*PQconnectdb*
fun:*PQconnectPoll*
fun:*PQconnectStart*
src:*libpq*
My compile flags:
<code>-g -O0 -Wall -pedantic -Werror -DDEBUG -Wno-missing-braces -fsanitize=memory -fno-omit-frame-pointer -fsanitize-memory-track-origins -fsanitize-blacklist=$(.CURDIR)/blist.txt
<code>-g -O0 -Wall -pedantic -Werror -DDEBUG -Wno-missing-braces -fsanitize=memory -fno-omit-frame-pointer -fsanitize-memory-track-origins -fsanitize-blacklist=$(.CURDIR)/blist.txt
</code>
-g -O0 -Wall -pedantic -Werror -DDEBUG -Wno-missing-braces -fsanitize=memory -fno-omit-frame-pointer -fsanitize-memory-track-origins -fsanitize-blacklist=$(.CURDIR)/blist.txt
Those flags are being added to both compiling the individual objects and when linking them together.
If I remove -Werror
and create an unitialized condition at the beginning of main
I can see this error. If I then add fun:main
to my blacklist it will properly skip. So the blacklist is working with my code, but not the third party library.
This said it could be because of mangled names, which is why I used the wild card. nm
does not work on a library.