about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/afl-forkserver.c74
1 files changed, 41 insertions, 33 deletions
diff --git a/src/afl-forkserver.c b/src/afl-forkserver.c
index 08368061..6b97f737 100644
--- a/src/afl-forkserver.c
+++ b/src/afl-forkserver.c
@@ -1796,14 +1796,19 @@ afl_fsrv_run_target(afl_forkserver_t *fsrv, u32 timeout,
 
     fsrv->last_kill_signal = fsrv->child_kill_signal;
 
-#ifndef AFL_PERSISTENT_RECORD
-    return FSRV_RUN_TMOUT;
-#else
-    retval = FSRV_RUN_TMOUT;
-    persistent_out_fmt = "%s/hangs/RECORD:%06u,cnt:%06u";
-    goto store_persistent_record;
+#ifdef AFL_PERSISTENT_RECORD
+    if (unlikely(fsrv->persistent_record)) {
+
+      retval = FSRV_RUN_TMOUT;
+      persistent_out_fmt = "%s/hangs/RECORD:%06u,cnt:%06u";
+      goto store_persistent_record;
+
+    }
+
 #endif
 
+    return FSRV_RUN_TMOUT;
+
   }
 
   /* Did we crash?
@@ -1827,53 +1832,56 @@ afl_fsrv_run_target(afl_forkserver_t *fsrv, u32 timeout,
     fsrv->last_kill_signal =
         WIFSIGNALED(fsrv->child_status) ? WTERMSIG(fsrv->child_status) : 0;
 
-#ifndef AFL_PERSISTENT_RECORD
-    return FSRV_RUN_CRASH;
-#else
-    retval = FSRV_RUN_CRASH;
-    persistent_out_fmt = "%s/crashes/RECORD:%06u,cnt:%06u";
-    goto store_persistent_record;
+#ifdef AFL_PERSISTENT_RECORD
+    if (unlikely(fsrv->persistent_record)) {
+
+      retval = FSRV_RUN_CRASH;
+      persistent_out_fmt = "%s/crashes/RECORD:%06u,cnt:%06u";
+      goto store_persistent_record;
+
+    }
+
 #endif
 
+    return FSRV_RUN_CRASH;
+
   }
 
   /* success :) */
   return FSRV_RUN_OK;
 
 #ifdef AFL_PERSISTENT_RECORD
-store_persistent_record:
-  if (unlikely(retval == FSRV_RUN_CRASH || retval == FSRV_RUN_TMOUT) &&
-      unlikely(fsrv->persistent_record)) {
-
-    char fn[PATH_MAX];
-    u32  i, writecnt = 0;
-    for (i = 0; i < fsrv->persistent_record; ++i) {
+store_persistent_record: {
 
-      u32 entry = (i + fsrv->persistent_record_idx) % fsrv->persistent_record;
-      u8 *data = fsrv->persistent_record_data[entry];
-      u32 len = fsrv->persistent_record_len[entry];
-      if (likely(len && data)) {
+  char fn[PATH_MAX];
+  u32  i, writecnt = 0;
+  for (i = 0; i < fsrv->persistent_record; ++i) {
 
-        snprintf(fn, sizeof(fn), persistent_out_fmt,
-                 fsrv->persistent_record_dir, fsrv->persistent_record_cnt,
-                 writecnt++);
-        int fd = open(fn, O_CREAT | O_TRUNC | O_WRONLY, 0644);
-        if (fd >= 0) {
+    u32 entry = (i + fsrv->persistent_record_idx) % fsrv->persistent_record;
+    u8 *data = fsrv->persistent_record_data[entry];
+    u32 len = fsrv->persistent_record_len[entry];
+    if (likely(len && data)) {
 
-          ck_write(fd, data, len, fn);
-          close(fd);
+      snprintf(fn, sizeof(fn), persistent_out_fmt, fsrv->persistent_record_dir,
+               fsrv->persistent_record_cnt, writecnt++);
+      int fd = open(fn, O_CREAT | O_TRUNC | O_WRONLY, 0644);
+      if (fd >= 0) {
 
-        }
+        ck_write(fd, data, len, fn);
+        close(fd);
 
       }
 
     }
 
-    ++fsrv->persistent_record_cnt;
-
   }
 
+  ++fsrv->persistent_record_cnt;
+
   return retval;
+
+}
+
 #endif
 
 }