aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2020-06-14 16:08:58 +0200
committervan Hauser <vh@thc.org>2020-06-14 16:08:58 +0200
commitab142282a32f93725926d59899ab17a62e65f060 (patch)
treefdb76bf2ebc44abe83eaa7274b36c91c03e1428e /src
parentbfe5b88e782ffd3f97c2a25da60b0b36552a6a64 (diff)
downloadafl++-ab142282a32f93725926d59899ab17a62e65f060.tar.gz
kill targets on exit
Diffstat (limited to 'src')
-rw-r--r--src/afl-forkserver.c7
-rw-r--r--src/afl-fuzz.c19
2 files changed, 26 insertions, 0 deletions
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);