aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2021-01-17 15:51:38 +0100
committervan Hauser <vh@thc.org>2021-01-17 15:51:38 +0100
commitc8c0983ab84f4f7acf2dd52937a3cf5e41157a6b (patch)
tree232d82fb1fab2e934b2a5976ac6cad3c1c37af75
parentc71ce79963ffd3e1203d1078b8a60f91c4ecebf1 (diff)
downloadafl++-c8c0983ab84f4f7acf2dd52937a3cf5e41157a6b.tar.gz
make combined test a define option
-rw-r--r--src/afl-fuzz-redqueen.c39
1 files changed, 34 insertions, 5 deletions
diff --git a/src/afl-fuzz-redqueen.c b/src/afl-fuzz-redqueen.c
index 052f59f1..daa08f6a 100644
--- a/src/afl-fuzz-redqueen.c
+++ b/src/afl-fuzz-redqueen.c
@@ -29,6 +29,7 @@
#include "cmplog.h"
//#define _DEBUG
+//#define COMBINE
///// Colorization
@@ -621,7 +622,9 @@ static u8 cmp_extend_encoding(afl_state_t *afl, struct cmp_header *h,
u64 tmp_64 = *buf_64;
*buf_64 = repl;
if (unlikely(its_fuzz(afl, buf, len, status))) { return 1; }
+#ifdef COMBINE
if (*status == 1) { memcpy(cbuf + idx, buf_64, 8); }
+#endif
*buf_64 = tmp_64;
// fprintf(stderr, "Status=%u\n", *status);
@@ -660,7 +663,9 @@ static u8 cmp_extend_encoding(afl_state_t *afl, struct cmp_header *h,
u32 tmp_32 = *buf_32;
*buf_32 = (u32)repl;
if (unlikely(its_fuzz(afl, buf, len, status))) { return 1; }
+#ifdef COMBINE
if (*status == 1) { memcpy(cbuf + idx, buf_32, 4); }
+#endif
*buf_32 = tmp_32;
// fprintf(stderr, "Status=%u\n", *status);
@@ -692,7 +697,9 @@ static u8 cmp_extend_encoding(afl_state_t *afl, struct cmp_header *h,
u16 tmp_16 = *buf_16;
*buf_16 = (u16)repl;
if (unlikely(its_fuzz(afl, buf, len, status))) { return 1; }
+#ifdef COMBINE
if (*status == 1) { memcpy(cbuf + idx, buf_16, 2); }
+#endif
*buf_16 = tmp_16;
}
@@ -728,7 +735,9 @@ static u8 cmp_extend_encoding(afl_state_t *afl, struct cmp_header *h,
u8 tmp_8 = *buf_8;
*buf_8 = (u8)repl;
if (unlikely(its_fuzz(afl, buf, len, status))) { return 1; }
+#ifdef COMBINE
if (*status == 1) { cbuf[idx] = *buf_8; }
+#endif
*buf_8 = tmp_8;
}
@@ -920,7 +929,9 @@ static u8 cmp_extend_encoding128(afl_state_t *afl, struct cmp_header *h,
*buf0 = v11;
#endif
if (unlikely(its_fuzz(afl, buf, len, status))) { return 1; }
+#ifdef COMBINE
if (*status == 1) { memcpy(cbuf + idx, buf_128, 16); }
+#endif
*buf_128 = tmp_128;
#ifdef _DEBUG
@@ -996,7 +1007,9 @@ static u8 cmp_extend_encoding_ld(afl_state_t *afl, struct cmp_header *h,
memcpy(backup, buf_ld, 10);
memcpy(buf_ld, repl, 10);
if (unlikely(its_fuzz(afl, buf, len, status))) { return 1; }
+#ifdef COMBINE
if (*status == 1) { memcpy(cbuf + idx, repl, 10); }
+#endif
memcpy(buf_ld, backup, 10);
#ifdef _DEBUG
@@ -1506,6 +1519,10 @@ static u8 rtn_extend_encoding(afl_state_t *afl, u8 *pattern, u8 *repl,
u8 *orig_buf, u8 *buf, u8 *cbuf, u32 len,
u8 *status) {
+#ifndef COMBINE
+ (void)(cbuf);
+#endif
+
u32 i;
u32 its_len = MIN((u32)32, len - idx);
its_len = MIN(its_len, taint_len);
@@ -1525,7 +1542,9 @@ static u8 rtn_extend_encoding(afl_state_t *afl, u8 *pattern, u8 *repl,
if (unlikely(its_fuzz(afl, buf, len, status))) { return 1; }
+#ifdef COMBINE
if (*status == 1) { memcpy(cbuf + idx, &buf[idx], i); }
+#endif
}
@@ -1763,10 +1782,14 @@ u8 input_to_state_stage(afl_state_t *afl, u8 *orig_buf, u8 *buf, u32 len) {
if (cmplog_lvl >= 2 && cmplog_done < 2) { lvl += 2; }
if (cmplog_lvl >= 3 && cmplog_done < 3) { lvl += 4; }
+#ifdef COMBINE
u8 *cbuf = afl_realloc((void **)&afl->in_scratch_buf, len + 128);
memcpy(cbuf, orig_buf, len);
u8 *virgin_backup = afl_realloc((void **)&afl->ex_buf, afl->shm.map_size);
memcpy(virgin_backup, afl->virgin_bits, afl->shm.map_size);
+#else
+ u8 *cbuf = NULL;
+#endif
u32 k;
for (k = 0; k < CMP_MAP_W; ++k) {
@@ -1855,6 +1878,7 @@ exit_its:
}
+#ifdef COMBINE
// copy the current virgin bits so we can recover the information
u8 *virgin_save = afl_realloc((void **)&afl->eff_buf, afl->shm.map_size);
memcpy(virgin_save, afl->virgin_bits, afl->shm.map_size);
@@ -1865,7 +1889,7 @@ exit_its:
its_fuzz(afl, cbuf, len, &status);
// now combine with the saved virgin bits
-#ifdef WORD_SIZE_64
+ #ifdef WORD_SIZE_64
u64 *v = (u64 *)afl->virgin_bits;
u64 *s = (u64 *)virgin_save;
u32 i;
@@ -1875,19 +1899,19 @@ exit_its:
}
-#else
+ #else
u32 *v = (u64 *)afl->virgin_bits;
u32 *s = (u64 *)virgin_save;
- u32 i;
+ u32 i;
for (i = 0; i < (afl->shm.map_size >> 2); i++) {
v[i] &= s[i];
}
-#endif
+ #endif
-#ifdef _DEBUG
+ #ifdef _DEBUG
dump("COMB", cbuf, len);
if (status == 1) {
@@ -1899,6 +1923,7 @@ exit_its:
}
+ #endif
#endif
new_hit_cnt = afl->queued_paths + afl->unique_crashes;
@@ -1909,3 +1934,7 @@ exit_its:
}
+#ifdef COMBINE
+ #undef COMBINE
+#endif
+