Index: third_party/afl/src/libdislocator/README.dislocator |
diff --git a/third_party/afl/src/libdislocator/README.dislocator b/third_party/afl/src/libdislocator/README.dislocator |
new file mode 100644 |
index 0000000000000000000000000000000000000000..837e74664e92ba5dacc58780b6c0fab8a918a438 |
--- /dev/null |
+++ b/third_party/afl/src/libdislocator/README.dislocator |
@@ -0,0 +1,60 @@ |
+=================================== |
+libdislocator, an abusive allocator |
+=================================== |
+ |
+ (See ../docs/README for the general instruction manual.) |
+ |
+This is a companion library that can be used as a drop-in replacement for the |
+libc allocator in the fuzzed binaries. It improves the odds of bumping into |
+heap-related security bugs in several ways: |
+ |
+ - It allocates all buffers so that they are immediately adjacent to a |
+ subsequent PROT_NONE page, causing most off-by-one reads and writes to |
+ immediately segfault, |
+ |
+ - It adds a canary immediately below the allocated buffer, to catch writes |
+ to negative offsets (won't catch reads, though), |
+ |
+ - It sets the memory returned by malloc() to garbage values, improving the |
+ odds of crashing when the target accesses uninitialized data, |
+ |
+ - It sets freed memory to PROT_NONE and does not actually reuse it, causing |
+ most use-after-free bugs to segfault right away, |
+ |
+ - It forces all realloc() calls to return a new address - and sets |
+ PROT_NONE on the original block. This catches use-after-realloc bugs, |
+ |
+ - It checks for calloc() overflows and can cause soft or hard failures |
+ of alloc requests past a configurable memory limit (AFL_LD_LIMIT_MB, |
+ AFL_LD_HARD_FAIL). |
+ |
+Basically, it is inspired by some of the non-default options available for the |
+OpenBSD allocator - see malloc.conf(5) on that platform for reference. It is |
+also somewhat similar to several other debugging libraries, such as gmalloc |
+and DUMA - but is simple, plug-and-play, and designed specifically for fuzzing |
+jobs. |
+ |
+Note that it does nothing for stack-based memory handling errors. The |
+-fstack-protector-all setting for GCC / clang, enabled when using AFL_HARDEN, |
+can catch some subset of that. |
+ |
+The allocator is slow and memory-intensive (even the tiniest allocation uses up |
+4 kB of physical memory and 8 kB of virtual mem), making it completely unsuitable |
+for "production" uses; but it can be faster and more hassle-free than ASAN / MSAN |
+when fuzzing small, self-contained binaries. |
+ |
+To use this library, run AFL like so: |
+ |
+AFL_PRELOAD=/path/to/libdislocator.so ./afl-fuzz [...other params...] |
+ |
+You *have* to specify path, even if it's just ./libdislocator.so or |
+$PWD/libdislocator.so. |
+ |
+Similarly to afl-tmin, the library is not "proprietary" and can be used with |
+other fuzzers or testing tools without the need for any code tweaks. It does not |
+require AFL-instrumented binaries to work. |
+ |
+Note that the AFL_PRELOAD approach (which AFL internally maps to LD_PRELOAD or |
+DYLD_INSERT_LIBRARIES, depending on the OS) works only if the target binary is |
+dynamically linked. Otherwise, attempting to use the library will have no |
+effect. |