about summary refs log tree commit diff
path: root/src/afl-forkserver.c
diff options
context:
space:
mode:
authorHuanyao Rong <r3tr0spect2019@qq.com>2024-06-21 21:03:37 -0700
committerNguyễn Gia Phong <cnx@loang.net>2024-12-03 11:17:44 +0900
commitd04bdf2e841fa6706c16bbba1cb6f6c73d647767 (patch)
tree23393adc733e6e9e61d7eb226c90258870bb0624 /src/afl-forkserver.c
parentcee3c86d7d5f0a05ad6cbb1434dc13162a16e336 (diff)
downloadafl++-d04bdf2e841fa6706c16bbba1cb6f6c73d647767.tar.gz
Implement AFLRun
References: https://github.com/Mem2019/AFLRun/commit/f5bb87f78ef1
References: https://github.com/Mem2019/AFLRun/commit/3af5f11b5644
Diffstat (limited to 'src/afl-forkserver.c')
-rw-r--r--src/afl-forkserver.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/afl-forkserver.c b/src/afl-forkserver.c
index 9b8660ce..67105dda 100644
--- a/src/afl-forkserver.c
+++ b/src/afl-forkserver.c
@@ -1395,6 +1395,26 @@ afl_fsrv_write_to_testcase(afl_forkserver_t *fsrv, u8 *buf, size_t len) {
 
 }
 
+/* Reset shared memory before each run */
+void afl_fsrv_clear(afl_forkserver_t *fsrv) {
+  memset(fsrv->trace_bits, 0, fsrv->map_size);
+
+  if (fsrv->num_reachables != 0) {
+
+    memset(fsrv->trace_reachables, 0, MAP_RBB_SIZE(fsrv->num_reachables));
+    memset(fsrv->trace_freachables, 0, MAP_RF_SIZE(fsrv->num_freachables));
+    memset(fsrv->trace_ctx, 0, MAP_TR_SIZE(fsrv->num_reachables));
+    fsrv->trace_virgin->num = 0;
+    fsrv->trace_targets->num = 0;
+
+    // If we want to count frequency, set last bit of block bitmap
+    if (fsrv->testing)
+      fsrv->trace_reachables[fsrv->num_reachables / 8] |=
+        1 << (fsrv->num_reachables % 8);
+
+  }
+}
+
 /* Execute target application, monitoring for timeouts. Return status
    information. The called program will update afl->fsrv->trace_bits. */
 
@@ -1470,14 +1490,12 @@ afl_fsrv_run_target(afl_forkserver_t *fsrv, u32 timeout,
 
 #ifdef __linux__
   if (!fsrv->nyx_mode) {
-
-    memset(fsrv->trace_bits, 0, fsrv->map_size);
+    afl_fsrv_clear(fsrv);
     MEM_BARRIER();
-
   }
 
 #else
-  memset(fsrv->trace_bits, 0, fsrv->map_size);
+  afl_fsrv_clear(fsrv);
   MEM_BARRIER();
 #endif