aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2021-05-20 11:14:46 +0200
committerGitHub <noreply@github.com>2021-05-20 11:14:46 +0200
commitda2d4d8258d725f79c2daa22bf3b1a59c593e472 (patch)
tree20f32501c01a7d504e75c6dc933c8168ed183759 /src
parent8b7a7b29c60f11cdf6226b3e418e87a5c3f5caac (diff)
downloadafl++-da2d4d8258d725f79c2daa22bf3b1a59c593e472.tar.gz
Push to stable (#927)
* sync (#886) * Create FUNDING.yml * Update FUNDING.yml * moved custom_mutator examples * unicorn speedtest makefile cleanup * fixed example location * fix qdbi * update util readme * Frida persistent (#880) * Added x64 support for persistent mode (function call only), in-memory teest cases and complog * Review changes, fix NeverZero and code to parse the .text section of the main executable. Excluded ranges TBC * Various minor fixes and finished support for AFL_INST_LIBS * Review changes Co-authored-by: Your Name <you@example.com> * nits * fix frida mode * Integer overflow/underflow fixes in libdislocator (#889) * libdislocator: fixing integer overflow in 'max_mem' variable and setting 'max_mem' type to 'size_t' * libdislocator: fixing potential integer underflow in 'total_mem' variable due to its different values in different threads * Bumped warnings up to the max and fixed remaining issues (#890) Co-authored-by: Your Name <you@example.com> * nits * frida mode - support non-pie * nits * nit * update grammar mutator * Fixes for aarch64, OSX and other minor issues (#891) Co-authored-by: Your Name <you@example.com> * nits * nits * fix PCGUARD, build aflpp_driver with fPIC * Added representative fuzzbench test and test for libxml (#893) * Added representative fuzzbench test and test for libxml * Added support for building FRIDA from source with FRIDA_SOURCE=1 Co-authored-by: Your Name <you@example.com> * nits * update changelog * typos * fixed potential double free in custom trim (#881) * error handling, freeing mem * frida: complog -> cmplog * fix statsd writing * let aflpp_qemu_driver_hook.so build fail gracefully * fix stdin trimming * Support for AFL_ENTRYPOINT (#898) Co-authored-by: Your Name <you@example.com> * remove the input file .cur_input at the end of the fuzzing, if AFL_TMPDIR is used * reverse push (#901) * Create FUNDING.yml * Update FUNDING.yml * disable QEMU static pie Co-authored-by: Andrea Fioraldi <andreafioraldi@gmail.com> * clarify that no modifications are required. * add new test for frida_mode (please review) * typos * fix persistent mode (64-bit) * set ARCH for linux intel 32-bit for frida-gum-devkit * prepare for 32-bit support (later) * not on qemu 3 anymore * unicorn mips fixes * instrumentation further move to C++11 (#900) * unicorn fixes * more unicorn fixes * Fix memory errors when trim causes testcase growth (#881) (#903) * Revert "fixed potential double free in custom trim (#881)" This reverts commit e9d2f72382cab75832721d859c3e731da071435d. * Revert "fix custom trim for increasing data" This reverts commit 86a8ef168dda766d2f25f15c15c4d3ecf21d0667. * Fix memory errors when trim causes testcase growth Modify trim_case_custom to avoid writing into in_buf because some custom mutators can cause the testcase to grow rather than shrink. Instead of modifying in_buf directly, we write the update out to the disk when trimming is complete, and then the caller is responsible for refreshing the in-memory buffer from the file. This is still a bit sketchy because it does need to modify q->len in order to notify the upper layers that something changed, and it could end up telling upper layer code that the q->len is *bigger* than the buffer (q->testcase_buf) that contains it, which is asking for trouble down the line somewhere... * Fix an unlikely situation Put back some `unlikely()` calls that were in the e9d2f72382cab75832721d859c3e731da071435d commit that was reverted. * typo * Exit on time (#904) * Variable AFL_EXIT_ON_TIME description has been added. Variables AFL_EXIT_ON_TIME and afl_exit_on_time has been added. afl->exit_on_time variable initialization has been added. The asignment of a value to the afl->afl_env.afl_exit_on_time variable from environment variables has been added. Code to exit on timeout if new path not found has been added. * Type of afl_exit_on_time variable has been changed. Variable exit_on_time has been added to the afl_state_t structure. * Command `export AFL_EXIT_WHEN_DONE=1` has been added. * Millisecond to second conversion has been added. Call get_cur_time() has been added. * Revert to using the saved current time value. * Useless check has been removed. * fix new path to custom-mutators * ensure crashes/README.txt exists * fix * Changes to bump FRIDA version and to clone FRIDA repo in to build directory rather than use a submodule as the FRIDA build scripts don't like it (#906) Co-authored-by: Your Name <you@example.com> * Fix numeric overflow in cmplog implementation (#907) Co-authored-by: Your Name <you@example.com> * testcase fixes for unicorn * remove merge conflict artifacts * fix afl-plot * Changes to remove binaries from frida_mode (#913) Co-authored-by: Your Name <you@example.com> * Frida cmplog fail fast (#914) * Changes to remove binaries from frida_mode * Changes to make cmplog fail fast Co-authored-by: Your Name <you@example.com> * afl-plot: relative time * arch linux and mac os support for afl-system-config * typo * code-format * update documentation * github workflow for qemu * OSX-specific improvements (#912) * Fix afl-cc to work correctly by default on OSX using xcode - CLANG_ENV_VAR must be set for afl-as to work - Use clang mode by default if no specific compiler selected * Add OSX-specific documentation for configuring shared memory * Fixes to memory operands for complog (#916) Co-authored-by: Your Name <you@example.com> * fix a few cur_time uses * added bounds check to pivot_inputs (fixes #921) * additional safety checks for restarts * restrict afl-showmap in_file size * fix seed crash disable * add warning for afl-showmap partial read * no core dumps * AFL_PRINT_FILENAMES added * more documentation for AFL_EXIT_ON_TIME * Flushing for AFL_PRINT_FILENAMES * FASAN Support (#918) * FASAN Support * Fix handling of Address Sanitizer DSO * Changes to identification of Address Sanitizer DSO Co-authored-by: Your Name <you@example.com> * Support for x86 (#920) Co-authored-by: Your Name <you@example.com> * Update frida_mode readme (#925) * libqasan: use syscalls for read and write * update readme * Minor integration tweaks (#926) Co-authored-by: Your Name <you@example.com> * merge * fix afl-fuzz.c frida preload * cleaned up AFL_PRINT_FILENAMES env Co-authored-by: Dominik Maier <domenukk@gmail.com> Co-authored-by: WorksButNotTested <62701594+WorksButNotTested@users.noreply.github.com> Co-authored-by: Your Name <you@example.com> Co-authored-by: Dmitry Zheregelya <zheregelya.d@gmail.com> Co-authored-by: hexcoder <hexcoder-@users.noreply.github.com> Co-authored-by: hexcoder- <heiko@hexco.de> Co-authored-by: Andrea Fioraldi <andreafioraldi@gmail.com> Co-authored-by: David CARLIER <devnexen@gmail.com> Co-authored-by: realmadsci <71108352+realmadsci@users.noreply.github.com> Co-authored-by: Roman M. Iudichev <SecNotice@ya.ru> Co-authored-by: Dustin Spicuzza <dustin@virtualroadside.com>
Diffstat (limited to 'src')
-rw-r--r--src/afl-cc.c12
-rw-r--r--src/afl-forkserver.c8
-rw-r--r--src/afl-fuzz-init.c18
-rw-r--r--src/afl-fuzz-one.c6
-rw-r--r--src/afl-fuzz-stats.c5
-rw-r--r--src/afl-fuzz.c107
-rw-r--r--src/afl-showmap.c100
7 files changed, 185 insertions, 71 deletions
diff --git a/src/afl-cc.c b/src/afl-cc.c
index 09009334..ff7b5219 100644
--- a/src/afl-cc.c
+++ b/src/afl-cc.c
@@ -1574,7 +1574,12 @@ int main(int argc, char **argv, char **envp) {
else if (have_gcc_plugin)
compiler_mode = GCC_PLUGIN;
else if (have_gcc)
+#ifdef __APPLE__
+ // on OSX clang masquerades as GCC
+ compiler_mode = CLANG;
+#else
compiler_mode = GCC;
+#endif
else if (have_lto)
compiler_mode = LTO;
else
@@ -1596,7 +1601,12 @@ int main(int argc, char **argv, char **envp) {
}
- if (compiler_mode == CLANG) { instrument_mode = INSTRUMENT_CLANG; }
+ if (compiler_mode == CLANG) {
+
+ instrument_mode = INSTRUMENT_CLANG;
+ setenv(CLANG_ENV_VAR, "1", 1); // used by afl-as
+
+ }
if (argc < 2 || strncmp(argv[1], "-h", 2) == 0) {
diff --git a/src/afl-forkserver.c b/src/afl-forkserver.c
index a07e78b4..3d472b36 100644
--- a/src/afl-forkserver.c
+++ b/src/afl-forkserver.c
@@ -451,8 +451,12 @@ void afl_fsrv_start(afl_forkserver_t *fsrv, char **argv,
/* Dumping cores is slow and can lead to anomalies if SIGKILL is delivered
before the dump is complete. */
- // r.rlim_max = r.rlim_cur = 0;
- // setrlimit(RLIMIT_CORE, &r); /* Ignore errors */
+ if (!fsrv->debug) {
+
+ r.rlim_max = r.rlim_cur = 0;
+ setrlimit(RLIMIT_CORE, &r); /* Ignore errors */
+
+ }
/* Isolate the process and configure standard descriptors. If out_file is
specified, stdin is /dev/null; otherwise, out_fd is cloned instead. */
diff --git a/src/afl-fuzz-init.c b/src/afl-fuzz-init.c
index cb586111..c43bcc2b 100644
--- a/src/afl-fuzz-init.c
+++ b/src/afl-fuzz-init.c
@@ -1044,18 +1044,16 @@ void perform_dry_run(afl_state_t *afl) {
/* Remove from fuzzing queue but keep for splicing */
- struct queue_entry *p = afl->queue;
+ if (!q->was_fuzzed) {
- if (!p->was_fuzzed) {
-
- p->was_fuzzed = 1;
+ q->was_fuzzed = 1;
--afl->pending_not_fuzzed;
--afl->active_paths;
}
- p->disabled = 1;
- p->perf_score = 0;
+ q->disabled = 1;
+ q->perf_score = 0;
u32 i = 0;
while (unlikely(i < afl->queued_paths && afl->queue_buf[i] &&
@@ -1294,9 +1292,13 @@ void pivot_inputs(afl_state_t *afl) {
if (src_str && sscanf(src_str + 1, "%06u", &src_id) == 1) {
- struct queue_entry *s = afl->queue_buf[src_id];
+ if (src_id < afl->queued_paths) {
+
+ struct queue_entry *s = afl->queue_buf[src_id];
- if (s) { q->depth = s->depth + 1; }
+ if (s) { q->depth = s->depth + 1; }
+
+ }
if (afl->max_depth < q->depth) { afl->max_depth = q->depth; }
diff --git a/src/afl-fuzz-one.c b/src/afl-fuzz-one.c
index 4eeb93de..4a3e7f33 100644
--- a/src/afl-fuzz-one.c
+++ b/src/afl-fuzz-one.c
@@ -562,7 +562,7 @@ u8 fuzz_one_original(afl_state_t *afl) {
if (afl->cmplog_lvl == 3 ||
(afl->cmplog_lvl == 2 && afl->queue_cur->tc_ref) ||
!(afl->fsrv.total_execs % afl->queued_paths) ||
- get_cur_time() - afl->last_path_time > 300000) {
+ get_cur_time() - afl->last_path_time > 300000) { // 300 seconds
if (input_to_state_stage(afl, in_buf, out_buf, len)) {
@@ -2013,7 +2013,7 @@ havoc_stage:
}
- if (unlikely(get_cur_time() - afl->last_path_time > 5000 &&
+ if (unlikely(get_cur_time() - afl->last_path_time > 5000 /* 5 seconds */ &&
afl->ready_for_splicing_count > 1)) {
/* add expensive havoc cases here if there is no findings in the last 5s */
@@ -3060,7 +3060,7 @@ static u8 mopt_common_fuzzing(afl_state_t *afl, MOpt_globals_t MOpt_globals) {
if (afl->cmplog_lvl == 3 ||
(afl->cmplog_lvl == 2 && afl->queue_cur->tc_ref) ||
!(afl->fsrv.total_execs % afl->queued_paths) ||
- get_cur_time() - afl->last_path_time > 300000) {
+ get_cur_time() - afl->last_path_time > 300000) { // 300 seconds
if (input_to_state_stage(afl, in_buf, out_buf, len)) {
diff --git a/src/afl-fuzz-stats.c b/src/afl-fuzz-stats.c
index 313263f9..4884b942 100644
--- a/src/afl-fuzz-stats.c
+++ b/src/afl-fuzz-stats.c
@@ -368,7 +368,8 @@ void maybe_update_plot_file(afl_state_t *afl, u32 t_bytes, double bitmap_cvg,
afl->plot_prev_uh == afl->unique_hangs &&
afl->plot_prev_md == afl->max_depth &&
afl->plot_prev_ed == afl->fsrv.total_execs) ||
- !afl->queue_cycle || get_cur_time() - afl->start_time <= 60))) {
+ !afl->queue_cycle ||
+ get_cur_time() - afl->start_time <= 60000))) {
return;
@@ -393,7 +394,7 @@ void maybe_update_plot_file(afl_state_t *afl, u32 t_bytes, double bitmap_cvg,
fprintf(afl->fsrv.plot_file,
"%llu, %llu, %u, %u, %u, %u, %0.02f%%, %llu, %llu, %u, %0.02f, %llu, "
"%u\n",
- (afl->prev_run_time + get_cur_time() - afl->start_time),
+ ((afl->prev_run_time + get_cur_time() - afl->start_time) / 1000),
afl->queue_cycle - 1, afl->current_entry, afl->queued_paths,
afl->pending_not_fuzzed, afl->pending_favored, bitmap_cvg,
afl->unique_crashes, afl->unique_hangs, afl->max_depth, eps,
diff --git a/src/afl-fuzz.c b/src/afl-fuzz.c
index 8de3ed6b..5f939115 100644
--- a/src/afl-fuzz.c
+++ b/src/afl-fuzz.c
@@ -328,11 +328,55 @@ static int stricmp(char const *a, char const *b) {
}
+static void fasan_check_afl_preload(char *afl_preload) {
+
+ char first_preload[PATH_MAX + 1] = {0};
+ char * separator = strchr(afl_preload, ':');
+ size_t first_preload_len = PATH_MAX;
+ char * basename;
+ char clang_runtime_prefix[] = "libclang_rt.asan-";
+
+ if (separator != NULL && (separator - afl_preload) < PATH_MAX) {
+
+ first_preload_len = separator - afl_preload;
+
+ }
+
+ strncpy(first_preload, afl_preload, first_preload_len);
+
+ basename = strrchr(first_preload, '/');
+ if (basename == NULL) {
+
+ basename = first_preload;
+
+ } else {
+
+ basename = basename + 1;
+
+ }
+
+ if (strncmp(basename, clang_runtime_prefix,
+ sizeof(clang_runtime_prefix) - 1) != 0) {
+
+ FATAL("Address Sanitizer DSO must be the first DSO in AFL_PRELOAD");
+
+ }
+
+ if (access(first_preload, R_OK) != 0) {
+
+ FATAL("Address Sanitizer DSO not found");
+
+ }
+
+ OKF("Found ASAN DSO: %s", first_preload);
+
+}
+
/* Main entry point */
int main(int argc, char **argv_orig, char **envp) {
- s32 opt, i, auto_sync = 0 /*, user_set_cache = 0*/;
+ s32 opt, auto_sync = 0 /*, user_set_cache = 0*/;
u64 prev_queued = 0;
u32 sync_interval_cnt = 0, seek_to = 0, show_help = 0,
map_size = get_map_size();
@@ -785,6 +829,7 @@ int main(int argc, char **argv_orig, char **envp) {
}
afl->fsrv.frida_mode = 1;
+ if (get_afl_env("AFL_USE_FASAN")) { afl->fsrv.frida_asan = 1; }
break;
@@ -1369,18 +1414,26 @@ int main(int argc, char **argv_orig, char **envp) {
OKF("Injecting %s ...", frida_binary);
if (afl_preload) {
- frida_afl_preload = alloc_printf("%s:%s", afl_preload, frida_binary);
+ if (afl->fsrv.frida_asan) {
- } else {
+ OKF("Using Frida Address Sanitizer Mode");
- frida_afl_preload = alloc_printf("%s", frida_binary);
+ fasan_check_afl_preload(afl_preload);
- }
+ setenv("ASAN_OPTIONS", "detect_leaks=false", 1);
- ck_free(frida_binary);
+ }
+
+ u8 *frida_binary = find_afl_binary(argv[0], "afl-frida-trace.so");
+ OKF("Injecting %s ...", frida_binary);
+ frida_afl_preload = alloc_printf("%s:%s", afl_preload, frida_binary);
+
+ ck_free(frida_binary);
+
+ setenv("LD_PRELOAD", frida_afl_preload, 1);
+ setenv("DYLD_INSERT_LIBRARIES", frida_afl_preload, 1);
- setenv("LD_PRELOAD", frida_afl_preload, 1);
- setenv("DYLD_INSERT_LIBRARIES", frida_afl_preload, 1);
+ }
} else {
@@ -1391,11 +1444,22 @@ int main(int argc, char **argv_orig, char **envp) {
} else if (afl->fsrv.frida_mode) {
- u8 *frida_binary = find_afl_binary(argv[0], "afl-frida-trace.so");
- OKF("Injecting %s ...", frida_binary);
- setenv("LD_PRELOAD", frida_binary, 1);
- setenv("DYLD_INSERT_LIBRARIES", frida_binary, 1);
- ck_free(frida_binary);
+ if (afl->fsrv.frida_asan) {
+
+ OKF("Using Frida Address Sanitizer Mode");
+ FATAL(
+ "Address Sanitizer DSO must be loaded using AFL_PRELOAD in Frida "
+ "Address Sanitizer Mode");
+
+ } else {
+
+ u8 *frida_binary = find_afl_binary(argv[0], "afl-frida-trace.so");
+ OKF("Injecting %s ...", frida_binary);
+ setenv("LD_PRELOAD", frida_binary, 1);
+ setenv("DYLD_INSERT_LIBRARIES", frida_binary, 1);
+ ck_free(frida_binary);
+
+ }
}
@@ -1770,7 +1834,7 @@ int main(int argc, char **argv_orig, char **envp) {
if (extras_dir_cnt) {
- for (i = 0; i < extras_dir_cnt; i++) {
+ for (u8 i = 0; i < extras_dir_cnt; i++) {
load_extras(afl, extras_dir[i]);
@@ -1922,6 +1986,13 @@ int main(int argc, char **argv_orig, char **envp) {
if (unlikely(seek_to)) {
+ if (unlikely(seek_to >= afl->queued_paths)) {
+
+ // This should never happen.
+ FATAL("BUG: seek_to location out of bounds!\n");
+
+ }
+
afl->current_entry = seek_to;
afl->queue_cur = afl->queue_buf[seek_to];
seek_to = 0;
@@ -1940,8 +2011,10 @@ int main(int argc, char **argv_orig, char **envp) {
/* If we had a full queue cycle with no new finds, try
recombination strategies next. */
- if (unlikely(afl->queued_paths == prev_queued &&
- (get_cur_time() - afl->start_time) >= 3600)) {
+ if (unlikely(afl->queued_paths == prev_queued
+ /* FIXME TODO BUG: && (get_cur_time() - afl->start_time) >=
+ 3600 */
+ )) {
if (afl->use_splicing) {
@@ -2059,7 +2132,7 @@ int main(int argc, char **argv_orig, char **envp) {
}
// we must recalculate the scores of all queue entries
- for (i = 0; i < (s32)afl->queued_paths; i++) {
+ for (u32 i = 0; i < afl->queued_paths; i++) {
if (likely(!afl->queue_buf[i]->disabled)) {
diff --git a/src/afl-showmap.c b/src/afl-showmap.c
index 946b19cd..9b4d21a5 100644
--- a/src/afl-showmap.c
+++ b/src/afl-showmap.c
@@ -76,17 +76,18 @@ static u32 in_len; /* Input data length */
static u32 map_size = MAP_SIZE;
-static u8 quiet_mode, /* Hide non-essential messages? */
+static bool quiet_mode, /* Hide non-essential messages? */
edges_only, /* Ignore hit counts? */
raw_instr_output, /* Do not apply AFL filters */
cmin_mode, /* Generate output in afl-cmin mode? */
binary_mode, /* Write output as a binary map */
keep_cores, /* Allow coredumps? */
- remove_shm = 1, /* remove shmem? */
+ remove_shm = true, /* remove shmem? */
collect_coverage, /* collect coverage */
have_coverage, /* have coverage? */
no_classify, /* do not classify counts */
- debug; /* debug mode */
+ debug, /* debug mode */
+ print_filenames; /* print the current filename */
static volatile u8 stop_soon, /* Ctrl-C pressed? */
child_crashed; /* Child crashed? */
@@ -320,11 +321,11 @@ static void showmap_run_target_forkserver(afl_forkserver_t *fsrv, u8 *mem,
if (fsrv->trace_bits[0] == 1) {
fsrv->trace_bits[0] = 0;
- have_coverage = 1;
+ have_coverage = true;
} else {
- have_coverage = 0;
+ have_coverage = false;
}
@@ -335,11 +336,11 @@ static void showmap_run_target_forkserver(afl_forkserver_t *fsrv, u8 *mem,
if (!fsrv->last_run_timed_out && !stop_soon &&
WIFSIGNALED(fsrv->child_status)) {
- child_crashed = 1;
+ child_crashed = true;
} else {
- child_crashed = 0;
+ child_crashed = false;
}
@@ -375,6 +376,13 @@ static void showmap_run_target_forkserver(afl_forkserver_t *fsrv, u8 *mem,
static u32 read_file(u8 *in_file) {
+ if (print_filenames) {
+
+ SAYF("Processing %s\n", in_file);
+ fflush(stdout);
+
+ }
+
struct stat st;
s32 fd = open(in_file, O_RDONLY);
@@ -386,7 +394,18 @@ static u32 read_file(u8 *in_file) {
}
- in_len = st.st_size;
+ if (st.st_size > MAX_FILE) {
+
+ WARNF("Input file '%s' is too large, only reading %u bytes.", in_file,
+ MAX_FILE);
+ in_len = MAX_FILE;
+
+ } else {
+
+ in_len = st.st_size;
+
+ }
+
in_data = ck_alloc_nozero(in_len);
ck_read(fd, in_data, in_len, in_file);
@@ -504,11 +523,11 @@ static void showmap_run_target(afl_forkserver_t *fsrv, char **argv) {
if (fsrv->trace_bits[0] == 1) {
fsrv->trace_bits[0] = 0;
- have_coverage = 1;
+ have_coverage = true;
} else {
- have_coverage = 0;
+ have_coverage = false;
}
@@ -518,7 +537,7 @@ static void showmap_run_target(afl_forkserver_t *fsrv, char **argv) {
if (!fsrv->last_run_timed_out && !stop_soon && WIFSIGNALED(status)) {
- child_crashed = 1;
+ child_crashed = true;
}
@@ -548,7 +567,7 @@ static void showmap_run_target(afl_forkserver_t *fsrv, char **argv) {
static void handle_stop_sig(int sig) {
(void)sig;
- stop_soon = 1;
+ stop_soon = true;
afl_fsrv_killall();
}
@@ -731,6 +750,8 @@ static void usage(u8 *argv0) {
"AFL_MAP_SIZE: the shared memory size for that target. must be >= the "
"size the target was compiled for\n"
"AFL_PRELOAD: LD_PRELOAD / DYLD_INSERT_LIBRARIES settings for target\n"
+ "AFL_PRINT_FILENAMES: If set, the filename currently processed will be "
+ "printed to stdout\n"
"AFL_QUIET: do not print extra informational output\n",
argv0, MEM_LIMIT, doc_path);
@@ -744,14 +765,17 @@ int main(int argc, char **argv_orig, char **envp) {
// TODO: u64 mem_limit = MEM_LIMIT; /* Memory limit (MB) */
- s32 opt, i;
- u8 mem_limit_given = 0, timeout_given = 0, unicorn_mode = 0, use_wine = 0;
+ s32 opt, i;
+ bool mem_limit_given = false, timeout_given = false, unicorn_mode = false,
+ use_wine = false;
char **use_argv;
char **argv = argv_cpy_dup(argc, argv_orig);
afl_forkserver_t fsrv_var = {0};
- if (getenv("AFL_DEBUG")) { debug = 1; }
+ if (getenv("AFL_DEBUG")) { debug = true; }
+ if (get_afl_env("AFL_PRINT_FILENAMES")) { print_filenames = true; }
+
fsrv = &fsrv_var;
afl_fsrv_init(fsrv);
map_size = get_map_size();
@@ -759,19 +783,19 @@ int main(int argc, char **argv_orig, char **envp) {
doc_path = access(DOC_PATH, F_OK) ? "docs" : DOC_PATH;
- if (getenv("AFL_QUIET") != NULL) { be_quiet = 1; }
+ if (getenv("AFL_QUIET") != NULL) { be_quiet = true; }
while ((opt = getopt(argc, argv, "+i:o:f:m:t:A:eqCZOQUWbcrsh")) > 0) {
switch (opt) {
case 's':
- no_classify = 1;
+ no_classify = true;
break;
case 'C':
- collect_coverage = 1;
- quiet_mode = 1;
+ collect_coverage = true;
+ quiet_mode = true;
break;
case 'i':
@@ -790,7 +814,7 @@ int main(int argc, char **argv_orig, char **envp) {
u8 suffix = 'M';
if (mem_limit_given) { FATAL("Multiple -m options not supported"); }
- mem_limit_given = 1;
+ mem_limit_given = true;
if (!optarg) { FATAL("Wrong usage of -m"); }
@@ -851,7 +875,7 @@ int main(int argc, char **argv_orig, char **envp) {
case 't':
if (timeout_given) { FATAL("Multiple -t options not supported"); }
- timeout_given = 1;
+ timeout_given = true;
if (!optarg) { FATAL("Wrong usage of -t"); }
@@ -873,12 +897,12 @@ int main(int argc, char **argv_orig, char **envp) {
if (edges_only) { FATAL("Multiple -e options not supported"); }
if (raw_instr_output) { FATAL("-e and -r are mutually exclusive"); }
- edges_only = 1;
+ edges_only = true;
break;
case 'q':
- quiet_mode = 1;
+ quiet_mode = true;
break;
case 'Z':
@@ -886,8 +910,8 @@ int main(int argc, char **argv_orig, char **envp) {
/* This is an undocumented option to write data in the syntax expected
by afl-cmin. Nobody else should have any use for this. */
- cmin_mode = 1;
- quiet_mode = 1;
+ cmin_mode = true;
+ quiet_mode = true;
break;
case 'A':
@@ -899,7 +923,7 @@ int main(int argc, char **argv_orig, char **envp) {
if (fsrv->frida_mode) { FATAL("Multiple -O options not supported"); }
- fsrv->frida_mode = 1;
+ fsrv->frida_mode = true;
break;
@@ -907,21 +931,21 @@ int main(int argc, char **argv_orig, char **envp) {
if (fsrv->qemu_mode) { FATAL("Multiple -Q options not supported"); }
- fsrv->qemu_mode = 1;
+ fsrv->qemu_mode = true;
break;
case 'U':
if (unicorn_mode) { FATAL("Multiple -U options not supported"); }
- unicorn_mode = 1;
+ unicorn_mode = true;
break;
case 'W': /* Wine+QEMU mode */
if (use_wine) { FATAL("Multiple -W options not supported"); }
- fsrv->qemu_mode = 1;
- use_wine = 1;
+ fsrv->qemu_mode = true;
+ use_wine = true;
break;
@@ -930,20 +954,20 @@ int main(int argc, char **argv_orig, char **envp) {
/* Secret undocumented mode. Writes output in raw binary format
similar to that dumped by afl-fuzz in <out_dir/queue/fuzz_bitmap. */
- binary_mode = 1;
+ binary_mode = true;
break;
case 'c':
if (keep_cores) { FATAL("Multiple -c options not supported"); }
- keep_cores = 1;
+ keep_cores = true;
break;
case 'r':
if (raw_instr_output) { FATAL("Multiple -r options not supported"); }
if (edges_only) { FATAL("-e and -r are mutually exclusive"); }
- raw_instr_output = 1;
+ raw_instr_output = true;
break;
case 'h':
@@ -1053,7 +1077,7 @@ int main(int argc, char **argv_orig, char **envp) {
/* initialize cmplog_mode */
shm_fuzz->cmplog_mode = 0;
u8 *map = afl_shm_init(shm_fuzz, MAX_FILE + sizeof(u32), 1);
- shm_fuzz->shmemfuzz_mode = 1;
+ shm_fuzz->shmemfuzz_mode = true;
if (!map) { FATAL("BUG: Zero return from afl_shm_init."); }
#ifdef USEMMAP
setenv(SHM_FUZZ_ENV_VAR, shm_fuzz->g_shm_file_path, 1);
@@ -1062,7 +1086,7 @@ int main(int argc, char **argv_orig, char **envp) {
setenv(SHM_FUZZ_ENV_VAR, shm_str, 1);
ck_free(shm_str);
#endif
- fsrv->support_shmem_fuzz = 1;
+ fsrv->support_shmem_fuzz = true;
fsrv->shmem_fuzz_len = (u32 *)map;
fsrv->shmem_fuzz = map + sizeof(u32);
@@ -1114,7 +1138,7 @@ int main(int argc, char **argv_orig, char **envp) {
struct stat statbuf;
#endif
- if (getenv("AFL_DEBUG_GDB")) wait_for_gdb = 1;
+ if (getenv("AFL_DEBUG_GDB")) wait_for_gdb = true;
fsrv->dev_null_fd = open("/dev/null", O_RDWR);
if (fsrv->dev_null_fd < 0) { PFATAL("Unable to open /dev/null"); }
@@ -1153,8 +1177,8 @@ int main(int argc, char **argv_orig, char **envp) {
if ((coverage_map = (u8 *)malloc(map_size)) == NULL)
FATAL("coult not grab memory");
- edges_only = 0;
- raw_instr_output = 1;
+ edges_only = false;
+ raw_instr_output = true;
}