about summary refs log tree commit diff
path: root/include
diff options
context:
space:
mode:
authorDavide Quarta <quarta@qti.qualcomm.com>2024-02-06 18:19:52 +0100
committerDavide Quarta <quarta@qti.qualcomm.com>2024-02-06 18:19:52 +0100
commite405e721fad46e594b633147a6940cfdd602e4c2 (patch)
treebe499292f16789860ec2a8c6cad64379c2819965 /include
parent49d4fa4346b919e1cef65490e9f0232da02cc822 (diff)
downloadafl++-e405e721fad46e594b633147a6940cfdd602e4c2.tar.gz
reuse first_pass aux var in persistent loop for record replay mode, keep area ptr and loc logic intact in record replay mode, move replay record example to own dir in utils, update docs, move record compat layer to separate header file
Diffstat (limited to 'include')
-rw-r--r--include/afl-persistent-replay.h (renamed from include/persistent_replay.h)86
-rw-r--r--include/afl-record-compat.h67
-rw-r--r--include/config.h6
3 files changed, 74 insertions, 85 deletions
diff --git a/include/persistent_replay.h b/include/afl-persistent-replay.h
index 58b22fb4..9e60ff9c 100644
--- a/include/persistent_replay.h
+++ b/include/afl-persistent-replay.h
@@ -10,6 +10,10 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 
+#ifndef PATH_MAX
+  #define PATH_MAX 4096
+#endif
+
 static unsigned short int is_replay_record;
 static unsigned int       replay_record;
 static unsigned int       replay_record_cnt;
@@ -23,7 +27,7 @@ static char **record_arg = NULL;
 
 static int select_files(const struct dirent *dirbuf) {
 
-  char fn[4096];
+  char fn[PATH_MAX];
 
   if (dirbuf->d_name[0] == '.') {
 
@@ -123,85 +127,5 @@ __attribute__((constructor)) static void __afl_record_replay_init(
 
 }
 
-/* only used if explictly included for compatibility
-   compiling without afl-cc */
-
-#ifdef AFL_COMPAT
-
-  #ifndef PATH_MAX
-    #define PATH_MAX 4096
-  #endif
-
-  #define FUZZ_BUF_SIZE 1024000
-
-  // extern ssize_t read(int fildes, void *buf, size_t nbyte);
-
-  // extern int __afl_persistent_loop(unsigned int max_cnt);
-  // extern unsigned char fuzz_buf[];
-
-  #ifndef __AFL_HAVE_MANUAL_CONTROL
-    #define __AFL_HAVE_MANUAL_CONTROL
-  #endif
-
-  #define __AFL_FUZZ_TESTCASE_LEN (read(0, fuzz_buf, FUZZ_BUF_SIZE))
-  #define __AFL_FUZZ_TESTCASE_BUF fuzz_buf
-  #define __AFL_FUZZ_INIT() void sync(void);
-  #define __AFL_INIT() sync()
-  #define __AFL_LOOP(x) __afl_persistent_loop(x)
-
-unsigned char fuzz_buf[FUZZ_BUF_SIZE];
-
-int __afl_persistent_loop(unsigned int max_cnt) {
-
-  static unsigned int       cycle_cnt = 1;
-  static unsigned short int inited = 0;
-  char                      tcase[PATH_MAX];
-
-  if (is_replay_record) {
-
-    if (!inited) {
-
-      cycle_cnt = replay_record_cnt;
-      inited = 1;
-
-    }
-
-    snprintf(tcase, PATH_MAX, "%s/%s",
-             replay_record_dir ? replay_record_dir : "./",
-             record_list[replay_record_cnt - cycle_cnt]->d_name);
-
-  #ifdef AFL_PERSISTENT_REPLAY_ARGPARSE
-    if (record_arg) {
-
-      *record_arg = tcase;
-
-    } else
-
-  #endif  // AFL_PERSISTENT_REPLAY_ARGPARSE
-    {
-
-      int fd = open(tcase, O_RDONLY);
-      dup2(fd, 0);
-      close(fd);
-
-    }
-
-  } else {
-
-    if (!inited) {
-
-      cycle_cnt = max_cnt;
-      inited = 1;
-
-    }
-
-  }
-
-  return cycle_cnt--;
-
-}
-
-#endif  // AFL_COMPAT
-
 #endif  // _HAVE_PERSISTENT_REPLAY_H
 
diff --git a/include/afl-record-compat.h b/include/afl-record-compat.h
new file mode 100644
index 00000000..2c79595d
--- /dev/null
+++ b/include/afl-record-compat.h
@@ -0,0 +1,67 @@
+#ifndef _HAVE_AFL_COMPAT_H
+#define _HAVE_AFL_COMPAT_H
+
+#include <afl-persistent-replay.h>
+
+#define FUZZ_BUF_SIZE 1024000
+
+// extern ssize_t read(int fildes, void *buf, size_t nbyte);
+
+// extern int __afl_persistent_loop(unsigned int max_cnt);
+// extern unsigned char fuzz_buf[];
+
+#ifndef __AFL_HAVE_MANUAL_CONTROL
+  #define __AFL_HAVE_MANUAL_CONTROL
+#endif
+
+#define __AFL_FUZZ_TESTCASE_LEN (read(0, fuzz_buf, FUZZ_BUF_SIZE))
+#define __AFL_FUZZ_TESTCASE_BUF fuzz_buf
+#define __AFL_FUZZ_INIT() void sync(void);
+#define __AFL_INIT() sync()
+#define __AFL_LOOP(x) __afl_persistent_loop(x)
+
+unsigned char fuzz_buf[FUZZ_BUF_SIZE];
+
+int __afl_persistent_loop(unsigned int max_cnt) {
+
+  static unsigned int       cycle_cnt = 1;
+  static unsigned short int inited = 0;
+  char                      tcase[PATH_MAX];
+
+  if (is_replay_record) {
+
+    if (!inited) {
+
+      cycle_cnt = replay_record_cnt;
+      inited = 1;
+
+    }
+
+    snprintf(tcase, PATH_MAX, "%s/%s",
+             replay_record_dir ? replay_record_dir : "./",
+             record_list[replay_record_cnt - cycle_cnt]->d_name);
+
+#ifdef AFL_PERSISTENT_REPLAY_ARGPARSE
+    if (record_arg) {
+
+      *record_arg = tcase;
+
+    } else
+
+#endif  // AFL_PERSISTENT_REPLAY_ARGPARSE
+    {
+
+      int fd = open(tcase, O_RDONLY);
+      dup2(fd, 0);
+      close(fd);
+
+    }
+
+  }
+
+  return --cycle_cnt;
+
+}
+
+#endif  // _HAVE_AFL_COMPAT_H
+
diff --git a/include/config.h b/include/config.h
index d44cda9c..a5b6eba1 100644
--- a/include/config.h
+++ b/include/config.h
@@ -83,13 +83,11 @@
    will be kept and written to the crash/ directory as RECORD:... files.
    Note that every crash will be written, not only unique ones! */
 
-#define AFL_PERSISTENT_RECORD
-
-/* Adds support in compiler-rt to replay persistent records */
-#define AFL_PERSISTENT_REPLAY
+// #define AFL_PERSISTENT_RECORD
 
 /* Adds support in compiler-rt to replay persistent records in @@-style
  * harnesses */
+
 //  #define AFL_PERSISTENT_REPLAY_ARGPARSE
 
 /* console output colors: There are three ways to configure its behavior