about summary refs log tree commit diff
path: root/src/afl-common.c
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2023-04-16 12:24:10 +0200
committerGitHub <noreply@github.com>2023-04-16 12:24:10 +0200
commit87b9dc4ba0d14d7a144578faf37f899724b826a3 (patch)
tree36083ff4099c01b2aedf0edfe193fcc855004729 /src/afl-common.c
parent2f6242d3f8b09bfbf9e2b172acd0c67015e6ef2b (diff)
parentd0b86bf05563dea686d27f14972f448b6f33023b (diff)
downloadafl++-87b9dc4ba0d14d7a144578faf37f899724b826a3.tar.gz
Merge pull request #1702 from schumilo/dev
add Nyx support in afl-showmap, afl-tmin, afl-cmin and afl-analyze
Diffstat (limited to 'src/afl-common.c')
-rw-r--r--src/afl-common.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/afl-common.c b/src/afl-common.c
index 86226c9f..5692e277 100644
--- a/src/afl-common.c
+++ b/src/afl-common.c
@@ -1359,3 +1359,42 @@ s32 create_file(u8 *fn) {
 
 }
 
+#ifdef __linux__
+
+/* Nyx requires a tmp workdir to access specific files (such as mmapped files,
+ * etc.). This helper function basically creates both a path to a tmp workdir
+ * and the workdir itself. If the environment variable TMPDIR is set, we use
+ * that as the base directory, otherwise we use /tmp. */
+char* create_nyx_tmp_workdir(void) {
+
+  char *tmpdir = getenv("TMPDIR");
+
+  if (!tmpdir) { tmpdir = "/tmp"; }
+
+  char* nyx_out_dir_path = alloc_printf("%s/.nyx_tmp_%d/", tmpdir, (u32)getpid());
+
+  if (mkdir(nyx_out_dir_path, 0700)) { 
+    PFATAL("Unable to create nyx workdir"); 
+  }
+
+  return nyx_out_dir_path;
+}
+
+/* Vice versa, we remove the tmp workdir for nyx with this helper function. */
+void remove_nyx_tmp_workdir(afl_forkserver_t *fsrv, char* nyx_out_dir_path) {
+  char* workdir_path = alloc_printf("%s/workdir", nyx_out_dir_path);
+
+  if (access(workdir_path, R_OK) == 0) {
+    if(fsrv->nyx_handlers->nyx_remove_work_dir(workdir_path) != true) {
+      WARNF("Unable to remove nyx workdir (%s)", workdir_path);
+    }
+  }
+
+  if (rmdir(nyx_out_dir_path)) {
+    WARNF("Unable to remove nyx workdir (%s)", nyx_out_dir_path);
+  }
+
+  ck_free(workdir_path);
+  ck_free(nyx_out_dir_path);
+}
+#endif