mirror of
https://github.com/AFLplusplus/AFLplusplus.git
synced 2025-06-08 16:21:32 +00:00
commit
fa1ac051eb
@ -1140,6 +1140,7 @@ struct custom_mutator {
|
|||||||
|
|
||||||
void afl_state_init(afl_state_t *, uint32_t map_size);
|
void afl_state_init(afl_state_t *, uint32_t map_size);
|
||||||
void afl_state_deinit(afl_state_t *);
|
void afl_state_deinit(afl_state_t *);
|
||||||
|
void afl_resize_map_buffers(afl_state_t *, u32 old_size, u32 new_size);
|
||||||
|
|
||||||
/* Set stop_soon flag on all children, kill all children */
|
/* Set stop_soon flag on all children, kill all children */
|
||||||
void afl_states_stop(void);
|
void afl_states_stop(void);
|
||||||
|
@ -148,6 +148,34 @@ void afl_state_init(afl_state_t *afl, uint32_t map_size) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void afl_resize_map_buffers(afl_state_t *afl, u32 old_size, u32 new_size) {
|
||||||
|
|
||||||
|
afl->virgin_bits = ck_realloc(afl->virgin_bits, new_size);
|
||||||
|
afl->virgin_tmout = ck_realloc(afl->virgin_tmout, new_size);
|
||||||
|
afl->virgin_crash = ck_realloc(afl->virgin_crash, new_size);
|
||||||
|
afl->var_bytes = ck_realloc(afl->var_bytes, new_size);
|
||||||
|
afl->top_rated = ck_realloc(afl->top_rated, new_size * sizeof(void *));
|
||||||
|
afl->clean_trace = ck_realloc(afl->clean_trace, new_size);
|
||||||
|
afl->clean_trace_custom = ck_realloc(afl->clean_trace_custom, new_size);
|
||||||
|
afl->first_trace = ck_realloc(afl->first_trace, new_size);
|
||||||
|
afl->map_tmp_buf = ck_realloc(afl->map_tmp_buf, new_size);
|
||||||
|
|
||||||
|
if (old_size < new_size) {
|
||||||
|
|
||||||
|
u32 size_diff = new_size - old_size;
|
||||||
|
|
||||||
|
memset(afl->var_bytes + old_size, 0, size_diff);
|
||||||
|
memset(afl->top_rated + old_size * sizeof(void *), 0,
|
||||||
|
size_diff * sizeof(void *));
|
||||||
|
memset(afl->clean_trace + old_size, 0, size_diff);
|
||||||
|
memset(afl->clean_trace_custom + old_size, 0, size_diff);
|
||||||
|
memset(afl->first_trace + old_size, 0, size_diff);
|
||||||
|
memset(afl->map_tmp_buf + old_size, 0, size_diff);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/*This sets up the environment variables for afl-fuzz into the afl_state
|
/*This sets up the environment variables for afl-fuzz into the afl_state
|
||||||
* struct*/
|
* struct*/
|
||||||
|
|
||||||
|
@ -2498,29 +2498,8 @@ int main(int argc, char **argv_orig, char **envp) {
|
|||||||
if (afl->non_instrumented_mode || afl->fsrv.qemu_mode ||
|
if (afl->non_instrumented_mode || afl->fsrv.qemu_mode ||
|
||||||
afl->fsrv.frida_mode || afl->fsrv.cs_mode || afl->unicorn_mode) {
|
afl->fsrv.frida_mode || afl->fsrv.cs_mode || afl->unicorn_mode) {
|
||||||
|
|
||||||
u32 old_map_size = map_size;
|
|
||||||
map_size = afl->fsrv.real_map_size = afl->fsrv.map_size = MAP_SIZE;
|
map_size = afl->fsrv.real_map_size = afl->fsrv.map_size = MAP_SIZE;
|
||||||
afl->virgin_bits = ck_realloc(afl->virgin_bits, map_size);
|
afl_resize_map_buffers(afl, map_size, MAP_SIZE);
|
||||||
afl->virgin_tmout = ck_realloc(afl->virgin_tmout, map_size);
|
|
||||||
afl->virgin_crash = ck_realloc(afl->virgin_crash, map_size);
|
|
||||||
afl->var_bytes = ck_realloc(afl->var_bytes, map_size);
|
|
||||||
afl->top_rated = ck_realloc(afl->top_rated, map_size * sizeof(void *));
|
|
||||||
afl->clean_trace = ck_realloc(afl->clean_trace, map_size);
|
|
||||||
afl->clean_trace_custom = ck_realloc(afl->clean_trace_custom, map_size);
|
|
||||||
afl->first_trace = ck_realloc(afl->first_trace, map_size);
|
|
||||||
afl->map_tmp_buf = ck_realloc(afl->map_tmp_buf, map_size);
|
|
||||||
|
|
||||||
if (old_map_size < map_size) {
|
|
||||||
|
|
||||||
memset(afl->var_bytes + old_map_size, 0, map_size - old_map_size);
|
|
||||||
memset(afl->top_rated + old_map_size, 0, map_size - old_map_size);
|
|
||||||
memset(afl->clean_trace + old_map_size, 0, map_size - old_map_size);
|
|
||||||
memset(afl->clean_trace_custom + old_map_size, 0,
|
|
||||||
map_size - old_map_size);
|
|
||||||
memset(afl->first_trace + old_map_size, 0, map_size - old_map_size);
|
|
||||||
memset(afl->map_tmp_buf + old_map_size, 0, map_size - old_map_size);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2548,31 +2527,7 @@ int main(int argc, char **argv_orig, char **envp) {
|
|||||||
if (map_size < new_map_size) {
|
if (map_size < new_map_size) {
|
||||||
|
|
||||||
OKF("Re-initializing maps to %u bytes", new_map_size);
|
OKF("Re-initializing maps to %u bytes", new_map_size);
|
||||||
|
afl_resize_map_buffers(afl, map_size, new_map_size);
|
||||||
u32 old_map_size = map_size;
|
|
||||||
afl->virgin_bits = ck_realloc(afl->virgin_bits, new_map_size);
|
|
||||||
afl->virgin_tmout = ck_realloc(afl->virgin_tmout, new_map_size);
|
|
||||||
afl->virgin_crash = ck_realloc(afl->virgin_crash, new_map_size);
|
|
||||||
afl->var_bytes = ck_realloc(afl->var_bytes, new_map_size);
|
|
||||||
afl->top_rated =
|
|
||||||
ck_realloc(afl->top_rated, new_map_size * sizeof(void *));
|
|
||||||
afl->clean_trace = ck_realloc(afl->clean_trace, new_map_size);
|
|
||||||
afl->clean_trace_custom =
|
|
||||||
ck_realloc(afl->clean_trace_custom, new_map_size);
|
|
||||||
afl->first_trace = ck_realloc(afl->first_trace, new_map_size);
|
|
||||||
afl->map_tmp_buf = ck_realloc(afl->map_tmp_buf, new_map_size);
|
|
||||||
|
|
||||||
if (old_map_size < new_map_size) {
|
|
||||||
|
|
||||||
memset(afl->var_bytes + old_map_size, 0, new_map_size - old_map_size);
|
|
||||||
memset(afl->top_rated + old_map_size, 0, new_map_size - old_map_size);
|
|
||||||
memset(afl->clean_trace + old_map_size, 0, new_map_size - old_map_size);
|
|
||||||
memset(afl->clean_trace_custom + old_map_size, 0,
|
|
||||||
new_map_size - old_map_size);
|
|
||||||
memset(afl->first_trace + old_map_size, 0, new_map_size - old_map_size);
|
|
||||||
memset(afl->map_tmp_buf + old_map_size, 0, new_map_size - old_map_size);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
afl_fsrv_kill(&afl->fsrv);
|
afl_fsrv_kill(&afl->fsrv);
|
||||||
afl_shm_deinit(&afl->shm);
|
afl_shm_deinit(&afl->shm);
|
||||||
@ -2633,7 +2588,6 @@ int main(int argc, char **argv_orig, char **envp) {
|
|||||||
*/
|
*/
|
||||||
afl->san_fsrvs[i].trace_bits = ck_alloc(
|
afl->san_fsrvs[i].trace_bits = ck_alloc(
|
||||||
afl->fsrv.map_size + 8); /* One more u64 according to afl_shm_init*/
|
afl->fsrv.map_size + 8); /* One more u64 according to afl_shm_init*/
|
||||||
afl->san_fsrvs[i].map_size = afl->fsrv.map_size;
|
|
||||||
afl->san_fsrvs[i].san_but_not_instrumented = 1;
|
afl->san_fsrvs[i].san_but_not_instrumented = 1;
|
||||||
|
|
||||||
afl->san_fsrvs[i].cs_mode = afl->fsrv.cs_mode;
|
afl->san_fsrvs[i].cs_mode = afl->fsrv.cs_mode;
|
||||||
@ -2643,10 +2597,6 @@ int main(int argc, char **argv_orig, char **envp) {
|
|||||||
afl->san_fsrvs[i].target_path = afl->san_binary[i];
|
afl->san_fsrvs[i].target_path = afl->san_binary[i];
|
||||||
afl->san_fsrvs[i].init_child_func = sanfuzz_exec_child;
|
afl->san_fsrvs[i].init_child_func = sanfuzz_exec_child;
|
||||||
|
|
||||||
afl->san_fsrvs[i].child_kill_signal =
|
|
||||||
afl->fsrv.child_kill_signal; // I believe cmplog also needs this.
|
|
||||||
afl->san_fsrvs[i].fsrv_kill_signal = afl->fsrv.fsrv_kill_signal;
|
|
||||||
|
|
||||||
if ((map_size <= DEFAULT_SHMEM_SIZE ||
|
if ((map_size <= DEFAULT_SHMEM_SIZE ||
|
||||||
afl->san_fsrvs[i].map_size < map_size) &&
|
afl->san_fsrvs[i].map_size < map_size) &&
|
||||||
!afl->non_instrumented_mode && !afl->fsrv.qemu_mode &&
|
!afl->non_instrumented_mode && !afl->fsrv.qemu_mode &&
|
||||||
@ -2669,18 +2619,7 @@ int main(int argc, char **argv_orig, char **envp) {
|
|||||||
|
|
||||||
OKF("Re-initializing maps to %u bytes due to SAN instrumented binary",
|
OKF("Re-initializing maps to %u bytes due to SAN instrumented binary",
|
||||||
new_map_size);
|
new_map_size);
|
||||||
|
afl_resize_map_buffers(afl, map_size, new_map_size);
|
||||||
afl->virgin_bits = ck_realloc(afl->virgin_bits, new_map_size);
|
|
||||||
afl->virgin_tmout = ck_realloc(afl->virgin_tmout, new_map_size);
|
|
||||||
afl->virgin_crash = ck_realloc(afl->virgin_crash, new_map_size);
|
|
||||||
afl->var_bytes = ck_realloc(afl->var_bytes, new_map_size);
|
|
||||||
afl->top_rated =
|
|
||||||
ck_realloc(afl->top_rated, new_map_size * sizeof(void *));
|
|
||||||
afl->clean_trace = ck_realloc(afl->clean_trace, new_map_size);
|
|
||||||
afl->clean_trace_custom =
|
|
||||||
ck_realloc(afl->clean_trace_custom, new_map_size);
|
|
||||||
afl->first_trace = ck_realloc(afl->first_trace, new_map_size);
|
|
||||||
afl->map_tmp_buf = ck_realloc(afl->map_tmp_buf, new_map_size);
|
|
||||||
|
|
||||||
afl_fsrv_kill(&afl->fsrv);
|
afl_fsrv_kill(&afl->fsrv);
|
||||||
afl_fsrv_kill(&afl->san_fsrvs[i]);
|
afl_fsrv_kill(&afl->san_fsrvs[i]);
|
||||||
@ -2746,31 +2685,7 @@ int main(int argc, char **argv_orig, char **envp) {
|
|||||||
if (map_size < new_map_size) {
|
if (map_size < new_map_size) {
|
||||||
|
|
||||||
OKF("Re-initializing maps to %u bytes due cmplog", new_map_size);
|
OKF("Re-initializing maps to %u bytes due cmplog", new_map_size);
|
||||||
|
afl_resize_map_buffers(afl, map_size, new_map_size);
|
||||||
u32 old_map_size = map_size;
|
|
||||||
afl->virgin_bits = ck_realloc(afl->virgin_bits, new_map_size);
|
|
||||||
afl->virgin_tmout = ck_realloc(afl->virgin_tmout, new_map_size);
|
|
||||||
afl->virgin_crash = ck_realloc(afl->virgin_crash, new_map_size);
|
|
||||||
afl->var_bytes = ck_realloc(afl->var_bytes, new_map_size);
|
|
||||||
afl->top_rated =
|
|
||||||
ck_realloc(afl->top_rated, new_map_size * sizeof(void *));
|
|
||||||
afl->clean_trace = ck_realloc(afl->clean_trace, new_map_size);
|
|
||||||
afl->clean_trace_custom =
|
|
||||||
ck_realloc(afl->clean_trace_custom, new_map_size);
|
|
||||||
afl->first_trace = ck_realloc(afl->first_trace, new_map_size);
|
|
||||||
afl->map_tmp_buf = ck_realloc(afl->map_tmp_buf, new_map_size);
|
|
||||||
|
|
||||||
if (old_map_size < new_map_size) {
|
|
||||||
|
|
||||||
memset(afl->var_bytes + old_map_size, 0, new_map_size - old_map_size);
|
|
||||||
memset(afl->top_rated + old_map_size, 0, new_map_size - old_map_size);
|
|
||||||
memset(afl->clean_trace + old_map_size, 0, new_map_size - old_map_size);
|
|
||||||
memset(afl->clean_trace_custom + old_map_size, 0,
|
|
||||||
new_map_size - old_map_size);
|
|
||||||
memset(afl->first_trace + old_map_size, 0, new_map_size - old_map_size);
|
|
||||||
memset(afl->map_tmp_buf + old_map_size, 0, new_map_size - old_map_size);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
afl_fsrv_kill(&afl->fsrv);
|
afl_fsrv_kill(&afl->fsrv);
|
||||||
afl_fsrv_kill(&afl->cmplog_fsrv);
|
afl_fsrv_kill(&afl->cmplog_fsrv);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user