diff options
author | Dominik Maier <domenukk@gmail.com> | 2020-03-01 13:46:57 +0100 |
---|---|---|
committer | Dominik Maier <domenukk@gmail.com> | 2020-03-01 13:47:33 +0100 |
commit | 6865cd8d691385f805a63b62f9836abf98061e4f (patch) | |
tree | 59679277c4015b004894e1eaf5955216b5fcee49 | |
parent | 59b80cb01e49804f1b6fabffa36514bb6a6a4fea (diff) | |
download | afl++-6865cd8d691385f805a63b62f9836abf98061e4f.tar.gz |
Added AFL_AUTORESUME option
-rw-r--r-- | docs/Changelog.md | 1 | ||||
-rw-r--r-- | docs/env_variables.md | 4 | ||||
-rw-r--r-- | include/afl-fuzz.h | 1 | ||||
-rw-r--r-- | include/envs.h | 1 | ||||
-rw-r--r-- | src/afl-fuzz-init.c | 20 | ||||
-rw-r--r-- | src/afl-fuzz.c | 11 |
6 files changed, 30 insertions, 8 deletions
diff --git a/docs/Changelog.md b/docs/Changelog.md index 2548a356..ab374596 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -13,6 +13,7 @@ sending a mail to <afl-users+subscribe@googlegroups.com>. - qemu_mode now uses solely the internal capstone version to fix builds on modern Linux distributions - more tools get environment variable usage info in the help output + - AFL_AUTORESUME will resume execution without the need to specify `-i -` ### Version ++2.62c (release): diff --git a/docs/env_variables.md b/docs/env_variables.md index fdc86a42..527f1c1b 100644 --- a/docs/env_variables.md +++ b/docs/env_variables.md @@ -265,6 +265,10 @@ checks or alter some of the more exotic semantics of the tool: - Setting AFL_NO_CPU_RED will not display very high cpu usages in red color. + - Setting AFL_AUTORESUME will resume a fuzz run (same as providing `-i -`) + for an existing out folder, even if a different `-i` was provided. + Without this setting, afl-fuzz will refuse execution for a long-fuzzed out dir. + - Outdated environment variables that are that not supported anymore: AFL_DEFER_FORKSRV AFL_PERSISTENT diff --git a/include/afl-fuzz.h b/include/afl-fuzz.h index 46bead3a..25764726 100644 --- a/include/afl-fuzz.h +++ b/include/afl-fuzz.h @@ -636,7 +636,6 @@ u32 find_start_position(void); void find_timeout(void); double get_runnable_processes(void); void nuke_resume_dir(void); -void maybe_delete_out_dir(void); void setup_dirs_fds(void); void setup_cmdline_file(char**); void setup_stdio_file(void); diff --git a/include/envs.h b/include/envs.h index 0f7ed37a..306143be 100644 --- a/include/envs.h +++ b/include/envs.h @@ -1,6 +1,7 @@ const char *afl_environment_variables[] = { "AFL_ALIGNED_ALLOC", "AFL_ALLOW_TMP", "AFL_ANALYZE_HEX", "AFL_AS", + "AFL_AUTORESUME", "AFL_AS_FORCE_INSTRUMENT", "AFL_BENCH_JUST_ONE", "AFL_BENCH_UNTIL_CRASH", "AFL_CAL_FAST", "AFL_CC", "AFL_CMIN_ALLOW_ANY", "AFL_CMIN_CRASHES_ONLY", "AFL_CODE_END", "AFL_CODE_START", "AFL_COMPCOV_BINNAME", diff --git a/src/afl-fuzz-init.c b/src/afl-fuzz-init.c index 632cdf6b..6e7d3f74 100644 --- a/src/afl-fuzz-init.c +++ b/src/afl-fuzz-init.c @@ -894,7 +894,7 @@ void find_timeout(void) { } -/* A helper function for maybe_delete_out_dir(), deleting all prefixed +/* A helper function for handle_existing_out_dir(), deleting all prefixed files in a directory. */ static u8 delete_files(u8* path, u8* prefix) { @@ -1018,9 +1018,10 @@ dir_cleanup_failed: } /* Delete fuzzer output directory if we recognize it as ours, if the fuzzer - is not currently running, and if the last run time isn't too great. */ + is not currently running, and if the last run time isn't too great. + Resume fuzzing if `-` is set as in_dir or if AFL_AUTORESUME is set */ -void maybe_delete_out_dir(void) { +static void handle_existing_out_dir(void) { FILE* f; u8* fn = alloc_printf("%s/fuzzer_stats", out_dir); @@ -1063,6 +1064,15 @@ void maybe_delete_out_dir(void) { fclose(f); + /* Autoresume treats a normal run as in_place_resume if a valid out dir already exists */ + + if (getenv("AFL_AUTORESUME")) { + + OKF("Detected prior run with AFL_AUTORESUME set. Resuming."); + in_place_resume = 1; + + } + /* Let's see how much work is at stake. */ if (!in_place_resume && last_update - start_time2 > OUTPUT_GRACE * 60) { @@ -1079,7 +1089,7 @@ void maybe_delete_out_dir(void) { " or specify a different output location for this job. To resume " "the old\n" " session, put '-' as the input directory in the command line " - "('-i -') and\n" + "('-i -') or set the AFL_AUTORESUME=1 env variable and\n" " try again.\n", OUTPUT_GRACE); @@ -1306,7 +1316,7 @@ void setup_dirs_fds(void) { if (errno != EEXIST) PFATAL("Unable to create '%s'", out_dir); - maybe_delete_out_dir(); + handle_existing_out_dir(); } else { diff --git a/src/afl-fuzz.c b/src/afl-fuzz.c index c7f8ccad..d4c75d9c 100644 --- a/src/afl-fuzz.c +++ b/src/afl-fuzz.c @@ -314,7 +314,14 @@ int main(int argc, char** argv, char** envp) { if (in_dir) FATAL("Multiple -i options not supported"); in_dir = optarg; - if (!strcmp(in_dir, "-")) in_place_resume = 1; + if (!strcmp(in_dir, "-")) { + + if (getenv("AFL_AUTORESUME")) + WARNF("AFL_AUTORESUME has no effect for '-i -'"); + + in_place_resume = 1; + + } break; @@ -649,7 +656,7 @@ int main(int argc, char** argv, char** envp) { usage(argv[0], show_help); OKF("afl++ is maintained by Marc \"van Hauser\" Heuse, Heiko \"hexcoder\" " - "Eißfeldt and Andrea Fioraldi"); + "Eißfeldt, Andrea Fioraldi and Dominik Maier"); OKF("afl++ is open source, get it at " "https://github.com/vanhauser-thc/AFLplusplus"); OKF("Power schedules from github.com/mboehme/aflfast"); |