aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2022-03-17 16:30:29 +0100
committerGitHub <noreply@github.com>2022-03-17 16:30:29 +0100
commit1bea949f34fb437a60ca772787a9018a3ba79053 (patch)
tree59d6f7ef2222cb92835d08398de3a1d32d2f8528 /src
parent3c11a377570512efeb3a197148ff1b7dddbd8e32 (diff)
parent1a65df2beee0a68bd5198a44f42ae1346f7ee231 (diff)
downloadafl++-1bea949f34fb437a60ca772787a9018a3ba79053.tar.gz
Merge branch 'dev' into newpm2
Diffstat (limited to 'src')
-rw-r--r--src/afl-cc.c36
-rw-r--r--src/afl-forkserver.c11
-rw-r--r--src/afl-fuzz-bitmap.c27
-rw-r--r--src/afl-fuzz-redqueen.c4
-rw-r--r--src/afl-fuzz-run.c2
-rw-r--r--src/afl-fuzz.c16
6 files changed, 61 insertions, 35 deletions
diff --git a/src/afl-cc.c b/src/afl-cc.c
index 4c977303..051e4910 100644
--- a/src/afl-cc.c
+++ b/src/afl-cc.c
@@ -473,7 +473,7 @@ static void edit_params(u32 argc, char **argv, char **envp) {
cc_params[cc_par_cnt++] =
alloc_printf("%s/split-switches-pass.so", obj_path);
#endif
-
+
}
}
@@ -499,7 +499,7 @@ static void edit_params(u32 argc, char **argv, char **envp) {
cc_params[cc_par_cnt++] =
alloc_printf("%s/compare-transform-pass.so", obj_path);
#endif
-
+
}
}
@@ -514,16 +514,11 @@ static void edit_params(u32 argc, char **argv, char **envp) {
} else {
-#if LLVM_MAJOR >= 11
- cc_params[cc_par_cnt++] =
- alloc_printf("-fpass-plugin=%s/split-compares-pass.so", obj_path);
-#else
cc_params[cc_par_cnt++] = "-Xclang";
cc_params[cc_par_cnt++] = "-load";
cc_params[cc_par_cnt++] = "-Xclang";
cc_params[cc_par_cnt++] =
alloc_printf("%s/split-compares-pass.so", obj_path);
-#endif
}
@@ -553,17 +548,11 @@ static void edit_params(u32 argc, char **argv, char **envp) {
alloc_printf("%s/cmplog-switches-pass.so", obj_path);
// reuse split switches from laf
-#if LLVM_MAJOR >= 11
- cc_params[cc_par_cnt++] = "-fexperimental-new-pass-manager";
- cc_params[cc_par_cnt++] =
- alloc_printf("-fpass-plugin=%s/split-switches-pass.so", obj_path);
-#else
cc_params[cc_par_cnt++] = "-Xclang";
cc_params[cc_par_cnt++] = "-load";
cc_params[cc_par_cnt++] = "-Xclang";
cc_params[cc_par_cnt++] =
alloc_printf("%s/split-switches-pass.so", obj_path);
-#endif
}
@@ -571,10 +560,10 @@ static void edit_params(u32 argc, char **argv, char **envp) {
}
-#if LLVM_MAJOR == 13 // TODO: set to 14 when done FIXME
- // Use the old pass manager in LLVM 13 which the afl++ passes still use.
- cc_params[cc_par_cnt++] = "-flegacy-pass-manager";
-#endif
+//#if LLVM_MAJOR >= 13
+// // Use the old pass manager in LLVM 14 which the afl++ passes still use.
+// cc_params[cc_par_cnt++] = "-flegacy-pass-manager";
+//#endif
if (lto_mode && !have_c) {
@@ -665,16 +654,10 @@ static void edit_params(u32 argc, char **argv, char **envp) {
} else {
-#if LLVM_MAJOR >= 11
- cc_params[cc_par_cnt++] = "-fexperimental-new-pass-manager";
- cc_params[cc_par_cnt++] =
- alloc_printf("-fpass-plugin=%s/afl-llvm-pass.so", obj_path);
-#else
cc_params[cc_par_cnt++] = "-Xclang";
cc_params[cc_par_cnt++] = "-load";
cc_params[cc_par_cnt++] = "-Xclang";
cc_params[cc_par_cnt++] = alloc_printf("%s/afl-llvm-pass.so", obj_path);
-#endif
}
@@ -695,20 +678,23 @@ static void edit_params(u32 argc, char **argv, char **envp) {
cc_params[cc_par_cnt++] = "-fexperimental-new-pass-manager";
cc_params[cc_par_cnt++] = alloc_printf(
"-fpass-plugin=%s/cmplog-instructions-pass.so", obj_path);
+ cc_params[cc_par_cnt++] = "-fexperimental-new-pass-manager";
+ cc_params[cc_par_cnt++] = alloc_printf(
+ "-fpass-plugin=%s/cmplog-routines-pass.so", obj_path);
#else
cc_params[cc_par_cnt++] = "-Xclang";
cc_params[cc_par_cnt++] = "-load";
cc_params[cc_par_cnt++] = "-Xclang";
cc_params[cc_par_cnt++] =
alloc_printf("%s/cmplog-instructions-pass.so", obj_path);
-#endif
cc_params[cc_par_cnt++] = "-Xclang";
cc_params[cc_par_cnt++] = "-load";
cc_params[cc_par_cnt++] = "-Xclang";
cc_params[cc_par_cnt++] =
alloc_printf("%s/cmplog-routines-pass.so", obj_path);
-
+#endif
+
}
}
diff --git a/src/afl-forkserver.c b/src/afl-forkserver.c
index 8997781d..628ff590 100644
--- a/src/afl-forkserver.c
+++ b/src/afl-forkserver.c
@@ -450,6 +450,9 @@ void afl_fsrv_start(afl_forkserver_t *fsrv, char **argv,
fsrv->nyx_handlers->nyx_option_set_timeout(fsrv->nyx_runner, 2, 0);
fsrv->nyx_handlers->nyx_option_apply(fsrv->nyx_runner);
+ fsrv->nyx_aux_string = malloc(0x1000);
+ memset(fsrv->nyx_aux_string, 0, 0x1000);
+
/* dry run */
fsrv->nyx_handlers->nyx_set_afl_input(fsrv->nyx_runner, "INIT", 4);
switch (fsrv->nyx_handlers->nyx_exec(fsrv->nyx_runner)) {
@@ -1253,7 +1256,13 @@ void afl_fsrv_kill(afl_forkserver_t *fsrv) {
fsrv->child_pid = -1;
#ifdef __linux__
- if (fsrv->nyx_mode) { fsrv->nyx_handlers->nyx_shutdown(fsrv->nyx_runner); }
+ if (fsrv->nyx_mode) {
+
+ free(fsrv->nyx_aux_string);
+ fsrv->nyx_handlers->nyx_shutdown(fsrv->nyx_runner);
+
+ }
+
#endif
}
diff --git a/src/afl-fuzz-bitmap.c b/src/afl-fuzz-bitmap.c
index b963caf8..971ac494 100644
--- a/src/afl-fuzz-bitmap.c
+++ b/src/afl-fuzz-bitmap.c
@@ -423,10 +423,10 @@ void write_crash_readme(afl_state_t *afl) {
"them to a vendor? Check out the afl-tmin that comes with the fuzzer!\n\n"
"Found any cool bugs in open-source tools using afl-fuzz? If yes, please "
- "drop\n"
- "an mail at <afl-users@googlegroups.com> once the issues are fixed\n\n"
-
- " https://github.com/AFLplusplus/AFLplusplus\n\n",
+ "post\n"
+ "to https://github.com/AFLplusplus/AFLplusplus/issues/286 once the "
+ "issues\n"
+ " are fixed :)\n\n",
afl->orig_cmdline,
stringify_mem_size(val_buf, sizeof(val_buf),
@@ -771,6 +771,25 @@ save_if_interesting(afl_state_t *afl, void *mem, u32 len, u8 fault) {
ck_write(fd, mem, len, fn);
close(fd);
+#ifdef __linux__
+ if (afl->fsrv.nyx_mode && fault == FSRV_RUN_CRASH) {
+
+ u8 fn_log[PATH_MAX];
+
+ snprintf(fn_log, PATH_MAX, "%s.log", fn);
+ fd = open(fn_log, O_WRONLY | O_CREAT | O_EXCL, DEFAULT_PERMISSION);
+ if (unlikely(fd < 0)) { PFATAL("Unable to create '%s'", fn_log); }
+
+ u32 nyx_aux_string_len = afl->fsrv.nyx_handlers->nyx_get_aux_string(
+ afl->fsrv.nyx_runner, afl->fsrv.nyx_aux_string, 0x1000);
+
+ ck_write(fd, afl->fsrv.nyx_aux_string, nyx_aux_string_len, fn_log);
+ close(fd);
+
+ }
+
+#endif
+
return keeping;
}
diff --git a/src/afl-fuzz-redqueen.c b/src/afl-fuzz-redqueen.c
index 1e4b1b3c..2f32ef1e 100644
--- a/src/afl-fuzz-redqueen.c
+++ b/src/afl-fuzz-redqueen.c
@@ -2136,7 +2136,7 @@ static u8 rtn_extend_encoding(afl_state_t *afl, u8 entry,
if ((i % 2)) {
- if (len > idx + i && is_hex(orig_buf + idx + i)) {
+ if (len > idx + i + 1 && is_hex(orig_buf + idx + i)) {
fromhex += 2;
@@ -2323,7 +2323,7 @@ static u8 rtn_extend_encoding(afl_state_t *afl, u8 entry,
if (unlikely(its_fuzz(afl, buf, len, status))) { return 1; }
// fprintf(stderr, "RTN ATTEMPT fromhex %u result %u\n", fromhex,
// *status);
- memcpy(buf + idx + i, save + i, i + 1 + off);
+ memcpy(buf + idx, save, i + 1 + off);
}
diff --git a/src/afl-fuzz-run.c b/src/afl-fuzz-run.c
index 5da0e583..2a9d186b 100644
--- a/src/afl-fuzz-run.c
+++ b/src/afl-fuzz-run.c
@@ -232,7 +232,7 @@ static void write_with_gap(afl_state_t *afl, u8 *mem, u32 len, u32 skip_at,
memcpy(afl->fsrv.shmem_fuzz, mem, skip_at);
- memcpy(afl->fsrv.shmem_fuzz, mem + skip_at + skip_len, tail_len);
+ memcpy(afl->fsrv.shmem_fuzz + skip_at, mem + skip_at + skip_len, tail_len);
}
diff --git a/src/afl-fuzz.c b/src/afl-fuzz.c
index c73ab38b..c5333056 100644
--- a/src/afl-fuzz.c
+++ b/src/afl-fuzz.c
@@ -167,7 +167,9 @@ static void usage(u8 *argv0, int more_help) {
" See docs/README.MOpt.md\n"
" -c program - enable CmpLog by specifying a binary compiled for "
"it.\n"
- " if using QEMU, just use -c 0.\n"
+ " if using QEMU/FRIDA or if you the fuzzing target is "
+ "compiled"
+ " for CmpLog then just use -c 0.\n"
" -l cmplog_opts - CmpLog configuration values (e.g. \"2AT\"):\n"
" 1=small files, 2=larger files (default), 3=all "
"files,\n"
@@ -466,6 +468,9 @@ nyx_plugin_handler_t *afl_load_libnyx_plugin(u8 *libnyx_binary) {
dlsym(handle, "nyx_get_bitmap_buffer_size");
if (plugin->nyx_get_bitmap_buffer_size == NULL) { goto fail; }
+ plugin->nyx_get_aux_string = dlsym(handle, "nyx_get_aux_string");
+ if (plugin->nyx_get_aux_string == NULL) { goto fail; }
+
OKF("libnyx plugin is ready!");
return plugin;
@@ -1458,6 +1463,13 @@ int main(int argc, char **argv_orig, char **envp) {
if (!afl->use_banner) { afl->use_banner = argv[optind]; }
+ if (afl->shm.cmplog_mode &&
+ (!strcmp("-", afl->cmplog_binary) || !strcmp("0", afl->cmplog_binary))) {
+
+ afl->cmplog_binary = argv[optind];
+
+ }
+
if (strchr(argv[optind], '/') == NULL && !afl->unicorn_mode) {
WARNF(cLRD
@@ -1675,7 +1687,7 @@ int main(int argc, char **argv_orig, char **envp) {
if (getenv("LD_PRELOAD")) {
WARNF(
- "LD_PRELOAD is set, are you sure that is what to you want to do "
+ "LD_PRELOAD is set, are you sure that is what you want to do "
"instead of using AFL_PRELOAD?");
}