diff --git a/include/envs.h b/include/envs.h index eda9ceaf..25063b8a 100644 --- a/include/envs.h +++ b/include/envs.h @@ -119,8 +119,8 @@ static char *afl_environment_variables[] = { "AFL_CFISAN_VERBOSE", "AFL_USE_LSAN", "AFL_WINE_PATH", "AFL_NO_SNAPSHOT", "AFL_EXPAND_HAVOC_NOW", "AFL_USE_FASAN", "AFL_USE_QASAN", "AFL_PRINT_FILENAMES", "AFL_PIZZA_MODE", "AFL_NO_FASTRESUME", - "AFL_SAN_ABSTRACTION", "AFL_LLVM_ONLY_FSRV", "AFL_GCC_ONLY_FRSV", "AFL_SAN_RECOVER", - "AFL_PRELOAD_DISCRIMINATE_FORKSERVER_PARENT", NULL}; + "AFL_SAN_ABSTRACTION", "AFL_LLVM_ONLY_FSRV", "AFL_GCC_ONLY_FRSV", + "AFL_SAN_RECOVER", "AFL_PRELOAD_DISCRIMINATE_FORKSERVER_PARENT", NULL}; extern char *afl_environment_variables[]; diff --git a/instrumentation/afl-compiler-rt.o.c b/instrumentation/afl-compiler-rt.o.c index 10a271cd..78826da8 100644 --- a/instrumentation/afl-compiler-rt.o.c +++ b/instrumentation/afl-compiler-rt.o.c @@ -1242,8 +1242,12 @@ void __afl_manual_init(void) { } if (getenv("AFL_LLVM_ONLY_FSRV") || getenv("AFL_GCC_ONLY_FRSV")) { - fprintf(stderr, "DEBUG: Overwrite area_ptr to dummy due to AFL_LLVM_ONLY_FSRV/AFL_GCC_ONLY_FRSV\n"); + + fprintf(stderr, + "DEBUG: Overwrite area_ptr to dummy due to " + "AFL_LLVM_ONLY_FSRV/AFL_GCC_ONLY_FRSV\n"); __afl_area_ptr = __afl_area_ptr_dummy; + } if (!init_done) { diff --git a/instrumentation/afl-gcc-pass.so.cc b/instrumentation/afl-gcc-pass.so.cc index 8509d60f..eeef4e02 100644 --- a/instrumentation/afl-gcc-pass.so.cc +++ b/instrumentation/afl-gcc-pass.so.cc @@ -506,9 +506,7 @@ int plugin_init(struct plugin_name_args *info, bool fsrv_only = !!getenv("AFL_GCC_ONLY_FRSV"); const char *name = info->base_name; - if (!fsrv_only) { - register_callback(name, PLUGIN_INFO, NULL, &afl_plugin); - } + if (!fsrv_only) { register_callback(name, PLUGIN_INFO, NULL, &afl_plugin); } afl_pass *aflp = new afl_pass(quiet, inst_ratio); struct register_pass_info pass_info = { @@ -521,9 +519,11 @@ int plugin_init(struct plugin_name_args *info, }; if (!fsrv_only) { + register_callback(name, PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info); register_callback(name, PLUGIN_FINISH, afl_pass::plugin_finalize, pass_info.pass); + } if (!quiet) diff --git a/src/afl-common.c b/src/afl-common.c index e61b8388..fbbf8e0d 100644 --- a/src/afl-common.c +++ b/src/afl-common.c @@ -819,15 +819,22 @@ void check_environment_vars(char **envp) { WARNF("AFL environment variable %s is deprecated!", afl_environment_deprecated[i]); - - if (strncmp(afl_environment_deprecated[i], - "AFL_SAN_NO_INST", strlen(afl_environment_deprecated[i])) == 0) { - WARNF("AFL_LLVM_ONLY_FSRV/AFL_GCC_ONLY_FSRV is induced and set instead."); - setenv("AFL_GCC_ONLY_FSRV", "1", 0); - setenv("AFL_LLVM_ONLY_FSRV", "1", 0); + + if (strncmp(afl_environment_deprecated[i], "AFL_SAN_NO_INST", + strlen(afl_environment_deprecated[i])) == 0) { + + WARNF( + "AFL_LLVM_ONLY_FSRV/AFL_GCC_ONLY_FSRV is induced and set " + "instead."); + setenv("AFL_GCC_ONLY_FSRV", "1", 0); + setenv("AFL_LLVM_ONLY_FSRV", "1", 0); + } else { + issue_detected = 1; + } + } else { i++; diff --git a/src/afl-fuzz-sanfuzz.c b/src/afl-fuzz-sanfuzz.c index 81c48449..330c9482 100644 --- a/src/afl-fuzz-sanfuzz.c +++ b/src/afl-fuzz-sanfuzz.c @@ -36,10 +36,11 @@ void sanfuzz_exec_child(afl_forkserver_t *fsrv, char **argv) { argv[0] != fsrv->asanfuzz_binary) { argv[0] = fsrv->asanfuzz_binary; + } - // In case users provide the normally instrumented binaries, this servers as the last - // resort to avoid collecting incorrect coverage. + // In case users provide the normally instrumented binaries, this servers as + // the last resort to avoid collecting incorrect coverage. setenv("AFL_LLVM_ONLY_FSRV", "1", 0); execv(fsrv->target_path, argv);