[PATCH] D45744: Add experimental feature to not use AFL's deferred forkserver.

Jonathan Metzman via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 17 16:01:39 PDT 2018


metzman created this revision.
Herald added subscribers: Sanitizers, llvm-commits, delcypher.

A small but substantial minority of libFuzzer-based fuzzers run code
that does not play well with fork in global constructors or
LLVMFuzzerInitialize. This patch allows these fuzzers to use
afl_driver by allowing them to opt-out of using AFL's deferred forkserver
which deferres calling fork until after this code.


Repository:
  rCRT Compiler Runtime

https://reviews.llvm.org/D45744

Files:
  lib/fuzzer/afl/afl_driver.cpp


Index: lib/fuzzer/afl/afl_driver.cpp
===================================================================
--- lib/fuzzer/afl/afl_driver.cpp
+++ lib/fuzzer/afl/afl_driver.cpp
@@ -138,6 +138,17 @@
 static const char *kExtraStatsFormatString = "peak_rss_mb            : %u\n"
                                              "slowest_unit_time_sec  : %u\n";
 
+// Experimental feature to use afl_driver without AFL's deferred mode.
+// Needs to run before __afl_auto_init.
+__attribute__((constructor(0))) void __decide_deferred_forkserver(void) {
+  if (getenv("AFL_DRIVER_DONT_DEFER")) {
+    if (unsetenv("__AFL_DEFER_FORKSRV")) {
+      perror("Failed to unset __AFL_DEFER_FORKSRV");
+      abort();
+    }
+  }
+}
+
 // Copied from FuzzerUtil.cpp.
 size_t GetPeakRSSMb() {
   struct rusage usage;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D45744.142856.patch
Type: text/x-patch
Size: 795 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180417/e954aedf/attachment.bin>


More information about the llvm-commits mailing list