Add support for standalone leak-sanitizer, introducting the environment

variable AFL_USE_LSAN.

AFL_USE_LSAN introduces the macro __AFL_CHECK_LEAK() which will check
for a memory leak when the macro is run. This is especially helpful
when using __AFL_LOOP().

If __AFL_LEAK_CHECK() is not used when AFL_USE_LSAN=1 is set,
the leak checker will run when the program exits.
This commit is contained in:
Joshua Rogers
2021-04-02 22:23:11 +00:00
parent e98cd00822
commit 920e9402a4
14 changed files with 120 additions and 17 deletions

View File

@ -2466,6 +2466,20 @@ void check_asan_opts(afl_state_t *afl) {
}
x = get_afl_env("LSAN_OPTIONS");
if (x) {
if (!strstr(x, "exit_code=" STRINGIFY(LSAN_ERROR))) {
FATAL("Custom LSAN_OPTIONS set without exit_code=" STRINGIFY(
LSAN_ERROR) " - please fix!");
}
}
}
/* Handle stop signal (Ctrl-C, etc). */
@ -2711,7 +2725,8 @@ void check_binary(afl_state_t *afl, u8 *fname) {
}
if (memmem(f_data, f_len, "__asan_init", 11) ||
memmem(f_data, f_len, "__msan_init", 11)) {
memmem(f_data, f_len, "__msan_init", 11) ||
memmem(f_data, f_len, "__lsan_init", 11)) {
afl->fsrv.uses_asan = 1;