Как заставить ASAN игнорировать дочерний процесс? - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь запустить свое приложение с включенным ASAN для поиска утечек и других ошибок, но, поскольку я использую popen внутри приложения, sanitizer также сообщает об ошибках дочерних процессов (о которых мне действительно все равно и сбивают с толку).

Есть ли способ заставить его игнорировать дочерние процессы?

Моя среда: Fedora 26, gcc 7.3.1, libasan 7.3.1-6

1 Ответ

0 голосов
/ 07 сентября 2018

Я подозреваю, что вы используете LD_PRELOAD=libasan.so, что приведет к предварительной загрузке среды выполнения Asan в дочерние процессы. Это приведет к некоторой ограниченной форме очистки, поскольку среда выполнения будет перехватывать и очищать вызовы стандартных функций libc, таких как malloc или memcpy.

Нет встроенного способа отключить это внутри Асана, поэтому лучше всего будет сбросить LD_PRELOAD при запуске программы:

int main() {
# ifdef __SANITIZE_ADDRESS__
  // Do not sanitize child processes
  // TODO: strip only libasan.so, keep everything else
  unsetenv("LD_PRELOAD");
# endif
...