diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/afl-fuzz-globals.c | 1 | ||||
-rw-r--r-- | src/afl-fuzz-init.c | 20 | ||||
-rw-r--r-- | src/afl-fuzz.c | 11 |
3 files changed, 26 insertions, 6 deletions
diff --git a/src/afl-fuzz-globals.c b/src/afl-fuzz-globals.c index 8577f875..1fd4b26d 100644 --- a/src/afl-fuzz-globals.c +++ b/src/afl-fuzz-globals.c @@ -115,6 +115,7 @@ u8 skip_deterministic, /* Skip deterministic stages? */ no_forkserver, /* Disable forkserver? */ crash_mode, /* Crash mode! Yeah! */ in_place_resume, /* Attempt in-place resume? */ + autoresume, /* Resume if out_dir exists? */ auto_changed, /* Auto-generated tokens changed? */ no_cpu_meter_red, /* Feng shui on the status screen */ no_arith, /* Skip most arithmetic ops */ diff --git a/src/afl-fuzz-init.c b/src/afl-fuzz-init.c index 9ae95b7d..08b6de60 100644 --- a/src/afl-fuzz-init.c +++ b/src/afl-fuzz-init.c @@ -866,7 +866,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) { @@ -990,9 +990,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); @@ -1035,6 +1036,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 (!in_place_resume && 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) { @@ -1051,7 +1061,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); @@ -1278,7 +1288,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 035f74dc..2f0043ab 100644 --- a/src/afl-fuzz.c +++ b/src/afl-fuzz.c @@ -186,6 +186,7 @@ static void usage(u8* argv0, int more_help) { //"AFL_DEFER_FORKSRV: not supported anymore -> no effect, just a warning\n" "AFL_EXIT_WHEN_DONE: exit when all inputs are run and no new finds are found\n" "AFL_BENCH_UNTIL_CRASH: exit soon when the first crashing input has been found\n" + "AFL_AUTORESUME: resume fuzzing if directory specified by -o already exists\n" "\n" ); else @@ -649,7 +650,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"); @@ -750,6 +751,14 @@ int main(int argc, char** argv, char** envp) { if (get_afl_env("AFL_SHUFFLE_QUEUE")) shuffle_queue = 1; if (get_afl_env("AFL_FAST_CAL")) fast_cal = 1; + if (get_afl_env("AFL_AUTORESUME")) { + + autoresume = 1; + if (in_place_resume) + SAYF("AFL_AUTORESUME has no effect for '-i -'"); + + } + if (get_afl_env("AFL_HANG_TMOUT")) { hang_tmout = atoi(getenv("AFL_HANG_TMOUT")); |