about summary refs log tree commit diff
path: root/src/afl-fuzz.c
diff options
context:
space:
mode:
authorAndrea Fioraldi <andreafioraldi@gmail.com>2021-01-29 15:38:49 +0100
committerAndrea Fioraldi <andreafioraldi@gmail.com>2021-01-29 15:38:49 +0100
commit6f5746d42878207b5d17af71317220932a42ebd7 (patch)
treecbac26eb9691c6319bf1bb1312e29f1b4a2f6ac2 /src/afl-fuzz.c
parent4488e8e10a6ea801fd32e88eddb142ecc3024908 (diff)
downloadafl++-6f5746d42878207b5d17af71317220932a42ebd7.tar.gz
AFL_USE_QASAN
Diffstat (limited to 'src/afl-fuzz.c')
-rw-r--r--src/afl-fuzz.c30
1 files changed, 27 insertions, 3 deletions
diff --git a/src/afl-fuzz.c b/src/afl-fuzz.c
index e856730e..54850173 100644
--- a/src/afl-fuzz.c
+++ b/src/afl-fuzz.c
@@ -326,8 +326,32 @@ int main(int argc, char **argv_orig, char **envp) {
         "compile time)");
 
   }
-
   #endif
+  
+  if (getenv("AFL_USE_QASAN")) {
+  
+    u8* preload = getenv("AFL_PRELOAD");
+    u8* libqasan = get_libqasan_path(argv_orig[0]);
+    
+    if (!preload) {
+    
+      setenv("AFL_PRELOAD", libqasan, 0);
+    
+    } else {
+    
+      u8 *result = ck_alloc(strlen(libqasan) + strlen(preload) + 2);
+      strcpy(result, libqasan);
+      strcat(result, " ");
+      strcat(result, preload);
+      
+      setenv("AFL_PRELOAD", result, 1);
+      ck_free(result);
+    
+    }
+    
+    ck_free(libqasan);
+  
+  }
 
   char **argv = argv_cpy_dup(argc, argv_orig);
 
@@ -1245,7 +1269,7 @@ int main(int argc, char **argv_orig, char **envp) {
         "instead of using AFL_PRELOAD?");
 
   }
-
+  
   if (afl->afl_env.afl_preload) {
 
     if (afl->fsrv.qemu_mode) {
@@ -1297,7 +1321,7 @@ int main(int argc, char **argv_orig, char **envp) {
     FATAL("Use AFL_PRELOAD instead of AFL_LD_PRELOAD");
 
   }
-
+  
   save_cmdline(afl, argc, argv);
 
   fix_up_banner(afl, argv[optind]);