Почему LSan (с g cc) не находит утечки памяти, которые выделяются mmap? - PullRequest
0 голосов
/ 14 апреля 2020

Я протестировал его с кодом ниже

// main.c
#include <sys/mman.h>
#include <string.h>
#include <stdlib.h>

int main() {
    int* ptr1 = (int*)malloc(1);
    int* ptr2 = (int*)mmap(0, 4096*10, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_SHARED, -1, 0);
}

Я строю, как показано ниже, и запускаю его
И как показывает результат, LSan обнаружил утечку только с mallo c
Есть ли какая-либо опция? что заставляет его находить утечки с помощью mmap или LSan просто предназначен для этого?

$ gcc -fsanitize=address -O0 main.cpp
$ ASAN_OPTIONS=detect_leaks=1 ./a.out

=================================================================
==14654==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 1 byte(s) in 1 object(s) allocated from:
    #0 0x7fc1054f0b50 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xdeb50)
    #1 0x55c984e2283b in main (/home/work/a.out+0x83b)
    #2 0x7fc105042b96 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)

SUMMARY: AddressSanitizer: 1 byte(s) leaked in 1 allocation(s).

1 Ответ

0 голосов
/ 17 апреля 2020

Я получил ответ от LSan github
И поэтому, пожалуйста, обратитесь по ссылке ниже, если кто-то хочет знать, почему у LSan такая политика

https://github.com/google/sanitizers/issues/1224

...