aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2019-12-30 22:01:36 +0100
committervan Hauser <vh@thc.org>2019-12-30 22:01:36 +0100
commit878a80de7f5f4fb0733bd48c974b498c0010514e (patch)
tree97351114bfb4fd0d5a1fb8afdea5e08b5dd33afc
parentf7e1397d989762eaf4375d2f79fde09d86e86f72 (diff)
downloadafl++-878a80de7f5f4fb0733bd48c974b498c0010514e.tar.gz
critical bugfix for afl-tmin
-rw-r--r--docs/ChangeLog1
-rw-r--r--include/afl-fuzz.h1
-rw-r--r--src/afl-analyze.c2
-rw-r--r--src/afl-as.c5
-rw-r--r--src/afl-common.c5
-rw-r--r--src/afl-forkserver.c4
-rw-r--r--src/afl-fuzz-globals.c1
-rw-r--r--src/afl-fuzz.c3
-rw-r--r--src/afl-showmap.c12
-rw-r--r--src/afl-tmin.c2
-rw-r--r--test-instr.c1
11 files changed, 29 insertions, 8 deletions
diff --git a/docs/ChangeLog b/docs/ChangeLog
index cad99c9f..3fd29e29 100644
--- a/docs/ChangeLog
+++ b/docs/ChangeLog
@@ -17,6 +17,7 @@ sending a mail to <afl-users+subscribe@googlegroups.com>.
Version ++2.59d (develop):
--------------------------
+ - fixed a critical bug in afl-tmin that was introduced during ++2.53d
- added ./experimental/argv_fuzzing ld_preload library by Kjell Braden
- added preeny's desock_dup ld_preload library as
./experimental/socket_fuzzing for network fuzzing
diff --git a/include/afl-fuzz.h b/include/afl-fuzz.h
index 39398c18..52352675 100644
--- a/include/afl-fuzz.h
+++ b/include/afl-fuzz.h
@@ -271,6 +271,7 @@ extern u64 mem_limit; /* Memory cap for child (MB) */
extern u8 cal_cycles, /* Calibration cycles defaults */
cal_cycles_long, /* Calibration cycles defaults */
no_unlink, /* do not unlink cur_input */
+ use_stdin, /* use stdin for sending data */
debug, /* Debug mode */
custom_only, /* Custom mutator only mode */
python_only; /* Python-only mode */
diff --git a/src/afl-analyze.c b/src/afl-analyze.c
index f71893d8..850ab99b 100644
--- a/src/afl-analyze.c
+++ b/src/afl-analyze.c
@@ -75,7 +75,7 @@ static u64 mem_limit = MEM_LIMIT; /* Memory limit (MB) */
static s32 dev_null_fd = -1; /* FD to /dev/null */
-static u8 edges_only, /* Ignore hit counts? */
+u8 edges_only, /* Ignore hit counts? */
use_hex_offsets, /* Show hex offsets? */
use_stdin = 1; /* Use stdin for program input? */
diff --git a/src/afl-as.c b/src/afl-as.c
index 8f24c16f..58ca18b7 100644
--- a/src/afl-as.c
+++ b/src/afl-as.c
@@ -208,8 +208,9 @@ static void edit_params(int argc, char** argv) {
NSS. */
if (strncmp(input_file, tmp_dir, strlen(tmp_dir)) &&
- strncmp(input_file, "/var/tmp/", 9) && strncmp(input_file, "/tmp/", 5)
- && getenv("AFL_AS_FORCE_INSTRUMENT") == NULL)
+ strncmp(input_file, "/var/tmp/", 9) &&
+ strncmp(input_file, "/tmp/", 5) &&
+ getenv("AFL_AS_FORCE_INSTRUMENT") == NULL)
pass_thru = 1;
else if (getenv("AFL_AS_FORCE_INSTRUMENT"))
unsetenv("AFL_AS_FORCE_INSTRUMENT");
diff --git a/src/afl-common.c b/src/afl-common.c
index ec010c2d..99d8d403 100644
--- a/src/afl-common.c
+++ b/src/afl-common.c
@@ -35,7 +35,8 @@
#include <unistd.h>
#endif
-u8* target_path; /* Path to target binary */
+u8* target_path; /* Path to target binary */
+extern u8 use_stdin;
void detect_file_args(char** argv, u8* prog_in) {
@@ -78,6 +79,8 @@ void detect_file_args(char** argv, u8* prog_in) {
else
aa_subst = alloc_printf("%s/%s", cwd, prog_in);
+ use_stdin = 0;
+
/* Construct a replacement argv value. */
*aa_loc = 0;
diff --git a/src/afl-forkserver.c b/src/afl-forkserver.c
index 5e20e50b..6c5daa08 100644
--- a/src/afl-forkserver.c
+++ b/src/afl-forkserver.c
@@ -43,6 +43,8 @@
/* a program that includes afl-forkserver needs to define these */
extern u8 uses_asan;
extern u8 *trace_bits;
+extern u8 use_stdin;
+
extern s32 forksrv_pid, child_pid, fsrv_ctl_fd, fsrv_st_fd;
extern s32 out_fd, out_dir_fd, dev_null_fd; /* initialize these with -1 */
#ifndef HAVE_ARC4RANDOM
@@ -211,7 +213,7 @@ void init_forkserver(char **argv) {
}
- if (out_file) {
+ if (!use_stdin) {
dup2(dev_null_fd, 0);
diff --git a/src/afl-fuzz-globals.c b/src/afl-fuzz-globals.c
index de716098..c731ea96 100644
--- a/src/afl-fuzz-globals.c
+++ b/src/afl-fuzz-globals.c
@@ -86,6 +86,7 @@ u8 cal_cycles = CAL_CYCLES, /* Calibration cycles defaults */
cal_cycles_long = CAL_CYCLES_LONG, /* Calibration cycles defaults */
debug, /* Debug mode */
no_unlink, /* do not unlink cur_input */
+ use_stdin = 1, /* use stdin for sending data */
custom_only, /* Custom mutator only mode */
python_only; /* Python-only mode */
diff --git a/src/afl-fuzz.c b/src/afl-fuzz.c
index ebc11f01..5effe0f7 100644
--- a/src/afl-fuzz.c
+++ b/src/afl-fuzz.c
@@ -304,6 +304,7 @@ int main(int argc, char** argv) {
if (out_file) FATAL("Multiple -f options not supported");
out_file = optarg;
+ use_stdin = 0;
break;
case 'x': /* dictionary */
@@ -836,6 +837,8 @@ int main(int argc, char** argv) {
if (aa_loc && !out_file) {
+ use_stdin = 0;
+
if (file_extension) {
out_file = alloc_printf("%s/.cur_input.%s", out_dir, file_extension);
diff --git a/src/afl-showmap.c b/src/afl-showmap.c
index 94bbd421..393b3772 100644
--- a/src/afl-showmap.c
+++ b/src/afl-showmap.c
@@ -72,11 +72,12 @@ static u32 total, highest; /* tuple content information */
static u64 mem_limit = MEM_LIMIT; /* Memory limit (MB) */
-static u8 quiet_mode, /* Hide non-essential messages? */
+u8 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 */
+ use_stdin = 1, /* use stdin - unused here */
keep_cores; /* Allow coredumps? */
static volatile u8 stop_soon, /* Ctrl-C pressed? */
@@ -535,7 +536,7 @@ int main(int argc, char** argv) {
doc_path = access(DOC_PATH, F_OK) ? "docs" : DOC_PATH;
- while ((opt = getopt(argc, argv, "+o:m:t:A:eqZQUWbcrh")) > 0)
+ while ((opt = getopt(argc, argv, "+o:f:m:t:A:eqZQUWbcrh")) > 0)
switch (opt) {
@@ -583,6 +584,13 @@ int main(int argc, char** argv) {
break;
+ case 'f': // only in here to avoid a compiler warning for use_stdin
+
+ use_stdin = 0;
+ FATAL("Option -f is not supported in afl-showmap");
+
+ break;
+
case 't':
if (timeout_given) FATAL("Multiple -t options not supported");
diff --git a/src/afl-tmin.c b/src/afl-tmin.c
index b98208f9..798b0527 100644
--- a/src/afl-tmin.c
+++ b/src/afl-tmin.c
@@ -88,7 +88,7 @@ u64 mem_limit = MEM_LIMIT; /* Memory limit (MB) */
s32 dev_null_fd = -1; /* FD to /dev/null */
-static u8 crash_mode, /* Crash-centric mode? */
+u8 crash_mode, /* Crash-centric mode? */
exit_crash, /* Treat non-zero exit as crash? */
edges_only, /* Ignore hit counts? */
exact_mode, /* Require path match for crashes? */
diff --git a/test-instr.c b/test-instr.c
index 161bdb8e..0b58eec0 100644
--- a/test-instr.c
+++ b/test-instr.c
@@ -27,6 +27,7 @@ int main(int argc, char** argv) {
if (argc > 1) {
buf = argv[1];
+ printf("Input %s - ", buf);
} else if (read(0, buf, sizeof(buf)) < 1) {