diff options
-rw-r--r-- | docs/Changelog.md | 1 | ||||
-rw-r--r-- | src/afl-forkserver.c | 7 | ||||
-rw-r--r-- | src/afl-fuzz.c | 19 |
3 files changed, 27 insertions, 0 deletions
diff --git a/docs/Changelog.md b/docs/Changelog.md index caf262fc..c0fc7070 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -19,6 +19,7 @@ sending a mail to <afl-users+subscribe@googlegroups.com>. - switched murmur2 hashing and random() for xxh3 and xoshiro256**, resulting in an up to 5.5% speed increase - Resizing the window does not crash afl-fuzz anymore + - Ensure that the targets are killed on exit - fix/update to MOpt (thanks to arnow117) - added MOpt dictionary support from repo - llvm_mode: diff --git a/src/afl-forkserver.c b/src/afl-forkserver.c index af06b5ff..1f61871a 100644 --- a/src/afl-forkserver.c +++ b/src/afl-forkserver.c @@ -466,6 +466,13 @@ void afl_fsrv_start(afl_forkserver_t *fsrv, char **argv, /* PARENT PROCESS */ + char pid_buf[16]; + sprintf(pid_buf, "%d", fsrv->fsrv_pid); + if (fsrv->cmplog_binary) + setenv("__AFL_TARGET_PID2", pid_buf, 1); + else + setenv("__AFL_TARGET_PID1", pid_buf, 1); + /* Close the unneeded endpoints. */ close(ctl_pipe[0]); diff --git a/src/afl-fuzz.c b/src/afl-fuzz.c index 46862613..b84585bb 100644 --- a/src/afl-fuzz.c +++ b/src/afl-fuzz.c @@ -31,6 +31,23 @@ extern u64 time_spent_working; #endif +static void at_exit() { + + int i; + char *ptr = getenv("__AFL_TARGET_PID1"); + + if (ptr && *ptr && (i = atoi(ptr)) > 0) + kill(i, SIGKILL); + + ptr = getenv("__AFL_TARGET_PID2"); + + if (ptr && *ptr && (i = atoi(ptr)) > 0) + kill(i, SIGKILL); + + // anything else? shared memory? + +} + static u8 *get_libradamsa_path(u8 *own_loc) { u8 *tmp, *cp, *rsl, *own_copy; @@ -1242,6 +1259,8 @@ int main(int argc, char **argv_orig, char **envp) { OKF("Cmplog forkserver successfully started"); } + + atexit(at_exit); perform_dry_run(afl); |