2017-01-12 21 views
0

오디오 신호 처리 라이브러리 용 입력을 생성하려고하는 LLVM 프로젝트의 libFuzzer를 실험하고 있습니다.LLVM libFuzzer rss memory increase

간단히하기 위해 -max_len = 65536을 사용하여 초기 코퍼스로 상수 0의 64kb PCM을 시작했습니다. 라이브러리 호출 당 메모리 소비량은 약 200kB이며 예상대로 해제해야합니다.

내가 메모리 소비가 fuzzer 로그에 RSS로 표시됩니다에 대해 궁금하네요 무엇 :

#1024 pulse cov: 26153 ft: 40811 corp: 783/33Mb exec/s: 7 rss: 541Mb 
#2048 pulse cov: 26154 ft: 40811 corp: 783/33Mb exec/s: 8 rss: 573Mb 
#4096 pulse cov: 26154 ft: 40811 corp: 783/33Mb exec/s: 8 rss: 574Mb 
#4895 NEW cov: 26156 ft: 40815 corp: 784/33Mb exec/s: 8 rss: 576Mb L: 26935 MS: 1 InsertRepeatedBytes- 
#8192 pulse cov: 26157 ft: 40815 corp: 784/33Mb exec/s: 8 rss: 578Mb 
#11875 NEW cov: 26157 ft: 40816 corp: 785/33Mb exec/s: 8 rss: 579Mb L: 59394 MS: 1 InsertByte- 
#12862 NEW cov: 26157 ft: 40817 corp: 786/33Mb exec/s: 8 rss: 579Mb L: 51404 MS: 3 EraseBytes-EraseBytes-CopyPart- 
#15357 NEW cov: 26157 ft: 40818 corp: 787/33Mb exec/s: 8 rss: 579Mb L: 64536 MS: 3 CopyPart-ChangeBit-InsertRepeatedBytes- 
#16384 pulse cov: 26157 ft: 40818 corp: 787/33Mb exec/s: 8 rss: 579Mb 
#23171 NEW cov: 26157 ft: 40820 corp: 788/33Mb exec/s: 8 rss: 579Mb L: 49412 MS: 2 InsertRepeatedBytes-CMP- DE: "\x00\x00\x00\x00\x00\x00\x00\x00"- 
#25426 NEW cov: 26158 ft: 40825 corp: 789/33Mb exec/s: 8 rss: 579Mb L: 64443 MS: 2 CMP-CMP- DE: "\x00\x00\x00\x00"-"\xff\xff"- 

왜 RSS 메트릭은 꾸준히 증가하고있다?

주의 증가는 메모리가 fuzzer 대상 호출 당 유출되지 않도록,합니다 (COV피트 수량과 유사) 수렴 보인다.

rss 메모리가 증가하는 설정 문제 또는 누수가 있습니까?

fuzzer 대상 호출 후 메모리 소비가 다시 설정되지 않으면 -rss_limit_mb 옵션을 fuzzer에서 사용할 수있는 근거는 무엇입니까? 메모리 증가

+0

누출이 있습니다. – Joky

답변

1

몇 가지 이유는 다음과 같습니다

  • 아산의 "검역"아산 검역에서 해제 된 메모리를 계속 사용-후 무료로 오류를 감지 할 수 있습니다. 격리 크기 제한없이 퍼지 (fuzzing)하면 메모리 증가가 제한되지 않습니다. quarantine_size_mb ASan option을 -1과 다른 값으로 변경하려고하면 무제한이라는 의미입니다.

  • libFuzzer의 내부 데이터 구조는 매우 커지지 않습니다.

  • 메모리는 isn't returned to the OS after being freed 코드로 할당됩니다. RSS 값은 종종 모든 테스트 입력에 사용 된 최대 값을 반영하며 그 이후에는 감소하지 않습니다. 물론 해제 된 모든 메모리는 후속 할당에서 사용할 수 있습니다.

  • 또 다른 설명은 코드에 실제로 메모리 누수가 있다는 것입니다. 많은 누출이 기본적으로 켜져있는 detect_leaks option으로 감지됩니다. 그러나 캐시와 같은 전역 데이터 구조가 끊임없이 커지기 때문에 퍼징 (fuzzing)시 감지 할 수없는 경우도 있습니다.

quarantine_size_mb 옵션을 사용하면 RSS가 결국 수렴됩니다.

+0

흥미로운 점. 메모리 증가는 실행 횟수에 따라 선형 적으로 증가 할 것이기 때문에 코드 자체에 누수가있을 것 같지 않습니다. 기본적으로 하나의 malloc과 하나의 실행 당 하나의 누수가 있으므로 누출이 없음을 알고 있습니다. 나는'quarantine_size_mb' 실험을 할 것입니다. – nucleon