about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gcc_plugin/afl-gcc-fast.c8
-rw-r--r--llvm_mode/LLVMInsTrim.so.cc24
-rw-r--r--llvm_mode/afl-llvm-pass.so.cc43
-rw-r--r--src/afl-as.c23
-rw-r--r--src/afl-gcc.c12
-rwxr-xr-xtest/test.sh1
6 files changed, 76 insertions, 35 deletions
diff --git a/gcc_plugin/afl-gcc-fast.c b/gcc_plugin/afl-gcc-fast.c
index 3117ccf0..2eef8798 100644
--- a/gcc_plugin/afl-gcc-fast.c
+++ b/gcc_plugin/afl-gcc-fast.c
@@ -192,6 +192,14 @@ static void edit_params(u32 argc, char** argv) {
 
     }
 
+    if (getenv("AFL_USE_UBSAN")) {
+
+      cc_params[cc_par_cnt++] = "-fsanitize=undefined";
+      cc_params[cc_par_cnt++] = "-fsanitize-undefined-trap-on-error";
+      cc_params[cc_par_cnt++] = "-fno-sanitize-recover=all";
+
+    }
+
   }
 
   if (!getenv("AFL_DONT_OPTIMIZE")) {
diff --git a/llvm_mode/LLVMInsTrim.so.cc b/llvm_mode/LLVMInsTrim.so.cc
index 5b7b79e1..9f5bf2a7 100644
--- a/llvm_mode/LLVMInsTrim.so.cc
+++ b/llvm_mode/LLVMInsTrim.so.cc
@@ -480,13 +480,25 @@ struct InsTrim : public ModulePass {
 
     }
 
+    char modeline[100];
+    snprintf(modeline, sizeof(modeline), "%s%s%s%s", 
+          getenv("AFL_HARDEN")
+              ? "hardened"
+              : "non-hardened",
+          getenv("AFL_USE_ASAN")
+              ? ", ASAN"
+              : "",
+          getenv("AFL_USE_MSAN")
+              ? ", MSAN"
+              : "",
+          getenv("AFL_USE_UBSAN")
+              ? ", UBSAN"
+              : ""
+    );
+
     OKF("Instrumented %u locations (%llu, %llu) (%s mode)\n", total_instr,
-        total_rs, total_hs,
-        getenv("AFL_HARDEN")
-            ? "hardened"
-            : ((getenv("AFL_USE_ASAN") || getenv("AFL_USE_MSAN"))
-                   ? "ASAN/MSAN"
-                   : "non-hardened"));
+        total_rs, total_hs, modeline);
+
     return false;
 
   }
diff --git a/llvm_mode/afl-llvm-pass.so.cc b/llvm_mode/afl-llvm-pass.so.cc
index 7d5cb224..77d63ce4 100644
--- a/llvm_mode/afl-llvm-pass.so.cc
+++ b/llvm_mode/afl-llvm-pass.so.cc
@@ -468,31 +468,24 @@ bool AFLCoverage::runOnModule(Module &M) {
     if (!inst_blocks)
       WARNF("No instrumentation targets found.");
     else {
-      char mode[64];
-      int not_hardened = 1;
-      if (getenv("AFL_HARDEN")) {
-        strcat(mode, "/hardened");
-        not_hardened = 0;
-      }      
-      if (getenv("AFL_USE_ASAN")) {
-        strcat(mode, "/ASAN");
-        not_hardened = 0;
-      }
-      if (getenv("AFL_USE_MSAN")) {
-        strcat(mode, "/MSAN");
-        not_hardened = 0;
-      }
-      if (getenv("AFL_USE_UBSAN")) {
-        strcat(mode, "/UNSAN");
-        not_hardened = 0;
-      }
-      
-      if (not_hardened)
-        OKF("Instrumented %u locations (non-hardened mode, ratio %u%%).",
-            inst_blocks, inst_ratio);
-      else
-        OKF("Instrumented %u locations (%s mode, ratio %u%%).", inst_blocks,
-            &mode[1], inst_ratio);
+      char modeline[100];
+      snprintf(modeline, sizeof(modeline), "%s%s%s%s", 
+          getenv("AFL_HARDEN")
+              ? "hardened"
+              : "non-hardened",
+          getenv("AFL_USE_ASAN")
+              ? ", ASAN"
+              : "",
+          getenv("AFL_USE_MSAN")
+              ? ", MSAN"
+              : "",
+          getenv("AFL_USE_UBSAN")
+              ? ", UBSAN"
+              : ""
+         );
+      OKF("Instrumented %u locations (%s mode, ratio %u%%).", inst_blocks,
+          modeline,
+          inst_ratio);
     }
 
   }
diff --git a/src/afl-as.c b/src/afl-as.c
index 5fa83569..12192838 100644
--- a/src/afl-as.c
+++ b/src/afl-as.c
@@ -478,13 +478,28 @@ static void add_instrumentation(void) {
     if (!ins_lines)
       WARNF("No instrumentation targets found%s.",
             pass_thru ? " (pass-thru mode)" : "");
-    else
+    else {
+      char modeline[100];
+      snprintf(modeline, sizeof(modeline), "%s%s%s%s", 
+          getenv("AFL_HARDEN")
+              ? "hardened"
+              : "non-hardened",
+          getenv("AFL_USE_ASAN")
+              ? ", ASAN"
+              : "",
+          getenv("AFL_USE_MSAN")
+              ? ", MSAN"
+              : "",
+          getenv("AFL_USE_UBSAN")
+              ? ", UBSAN"
+              : ""
+         );
+
       OKF("Instrumented %u locations (%s-bit, %s mode, ratio %u%%).", ins_lines,
           use_64bit ? "64" : "32",
-          getenv("AFL_HARDEN") ? "hardened"
-                               : (sanitizer ? "ASAN/MSAN" : "non-hardened"),
+          modeline,
           inst_ratio);
-
+    }
   }
 
 }
diff --git a/src/afl-gcc.c b/src/afl-gcc.c
index e46fe5cd..5ead32fb 100644
--- a/src/afl-gcc.c
+++ b/src/afl-gcc.c
@@ -282,6 +282,18 @@ static void edit_params(u32 argc, char** argv) {
 
   }
 
+  if (!asan_set) {
+
+    if (getenv("AFL_USE_UBSAN")) {
+
+      cc_params[cc_par_cnt++] = "-fsanitize=undefined";
+      cc_params[cc_par_cnt++] = "-fsanitize-undefined-trap-on-error";
+      cc_params[cc_par_cnt++] = "-fno-sanitize-recover=all";
+
+    }
+
+  }
+
 #ifdef USEMMAP
   cc_params[cc_par_cnt++] = "-lrt";
 #endif
diff --git a/test/test.sh b/test/test.sh
index c78297f6..1a3ae4ea 100755
--- a/test/test.sh
+++ b/test/test.sh
@@ -43,6 +43,7 @@ unset AFL_DEBUG
 unset AFL_HARDEN
 unset AFL_USE_ASAN
 unset AFL_USE_MSAN
+unset AFL_USE_UBSAN
 unset AFL_CC
 unset AFL_PRELOAD
 unset AFL_GCC_WHITELIST