aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/afl-fuzz-globals.c1
-rw-r--r--src/afl-fuzz-init.c20
-rw-r--r--src/afl-fuzz.c11
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"));