Как мне заставить Clang-дезинфицирующее средство памяти игнорировать данные из определенных библиотек?
Например, я хотел бы игнорировать sqlite и zlib, потому что я знаю, что они хорошо протестированы. я схватил
zpipe.c
пример и построил его следующим образом. Имейте в виду, что я использую
-lz
и не строить zlib самостоятельно. Я только сам создаю zpipe и хочу ограничить дезинфекцию этим одним файлом.
clang -g -fsanitize=undefined,memory zpipe.c -lz
я побежал
echo Test | ./a.out
и я получил следующую ошибку
Uninitialized bytes in __interceptor_fwrite at offset 0 inside [0x7ffd61230bc0, 13)
==50435==WARNING: MemorySanitizer: use-of-uninitialized-value
#0 0x55767941cd85 in def /tmp/zlib-1.2.12/examples/zpipe.c:70:17
#1 0x55767941e709 in main /tmp/zlib-1.2.12/examples/zpipe.c:186:15
#2 0x7f65e834e30f in __libc_start_call_main libc-start.c
#3 0x7f65e834e3c0 in __libc_start_main@GLIBC_2.2.5 (/usr/lib/libc.so.6+0x2d3c0)
#4 0x5576793981d4 in _start (/tmp/zlib-1.2.12/examples/a.out+0x211d4)
SUMMARY: MemorySanitizer: use-of-uninitialized-value /tmp/zlib-1.2.12/examples/zpipe.c:70:17 in def
Есть ли способ, которым я могу сказать, что любые данные, которые входят и выходят из zlib или sqlite, безопасны для использования? Я буду связывать оба и хочу только дезинфицировать свой собственный код
1 ответ
Вы можете использовать файл списка игнорирования. https://clang.llvm.org/docs/SanitizerSpecialCaseList.html
Применение:
clang -fsanitize=address -fsanitize-ignorelist=ignorelist.txt foo.c
Подробнее о формате файла см. в документации.