aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavide Quarta <quarta@qti.qualcomm.com>2024-02-07 12:00:01 +0100
committerDavide Quarta <quarta@qti.qualcomm.com>2024-02-07 12:00:01 +0100
commitea0ea88ed3eb7c8cdc313284a6d434dcf01d7455 (patch)
tree556cc48720d9b211d0822314798a38205c843d5a
parent8e4bd0314e0ee2cd4b758e96591b0338a534623a (diff)
downloadafl++-ea0ea88ed3eb7c8cdc313284a6d434dcf01d7455.tar.gz
add conditional check for persistent record mode on forkserver handling of hang/crash
-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
}