about summary refs log tree commit diff
path: root/src/afl-fuzz-state.c
diff options
context:
space:
mode:
authorAndrea Fioraldi <andreafioraldi@gmail.com>2020-04-22 13:51:40 +0200
committerAndrea Fioraldi <andreafioraldi@gmail.com>2020-04-22 13:51:40 +0200
commitdf8a0e84184a408a463c29443cfa3ee9fa556896 (patch)
tree0257c84abe8b4f9859caf2f35244adc7146ee994 /src/afl-fuzz-state.c
parentb8a25063f678c8afe3c1390d6a6ba130b0500e26 (diff)
parent6df21f3489ea482362983eda7e51c040d06e56f1 (diff)
downloadafl++-df8a0e84184a408a463c29443cfa3ee9fa556896.tar.gz
Merge branch 'dev' of github.com:vanhauser-thc/AFLplusplus into dev
Diffstat (limited to 'src/afl-fuzz-state.c')
-rw-r--r--src/afl-fuzz-state.c57
1 files changed, 40 insertions, 17 deletions
diff --git a/src/afl-fuzz-state.c b/src/afl-fuzz-state.c
index 7664c521..b38c9ec5 100644
--- a/src/afl-fuzz-state.c
+++ b/src/afl-fuzz-state.c
@@ -75,12 +75,14 @@ list_t afl_states = {.element_prealloc_count = 0};
 
 /* Initializes an afl_state_t. */
 
-void afl_state_init(afl_state_t *afl) {
+void afl_state_init(afl_state_t *afl, uint32_t map_size) {
 
   /* thanks to this memset, growing vars like out_buf
   and out_size are NULL/0 by default. */
   memset(afl, 0, sizeof(afl_state_t));
 
+  if (!map_size) { afl->shm.map_size = MAP_SIZE; }
+
   afl->w_init = 0.9;
   afl->w_end = 0.3;
   afl->g_max = 5000;
@@ -97,9 +99,18 @@ void afl_state_init(afl_state_t *afl) {
   afl->cpu_aff = -1;                    /* Selected CPU core                */
 #endif                                                     /* HAVE_AFFINITY */
 
-  afl->fsrv.use_stdin = 1;
+  afl->virgin_bits = ck_alloc(map_size);
+  afl->virgin_tmout = ck_alloc(map_size);
+  afl->virgin_crash = ck_alloc(map_size);
+  afl->var_bytes = ck_alloc(map_size);
+  afl->top_rated = ck_alloc(map_size * sizeof(void *));
+  afl->clean_trace = ck_alloc(map_size);
+  afl->clean_trace_custom = ck_alloc(map_size);
+  afl->first_trace = ck_alloc(map_size);
+  afl->map_tmp_buf = ck_alloc(map_size);
 
-  afl->fsrv.map_size = MAP_SIZE;
+  afl->fsrv.use_stdin = 1;
+  afl->fsrv.map_size = map_size;
   afl->fsrv.function_opt = (u8 *)afl;
   afl->fsrv.function_ptr = &maybe_add_auto;
 
@@ -333,10 +344,12 @@ void read_afl_environment(afl_state_t *afl, char **envp) {
 
           }
 
-        } else
+        } else {
 
           i++;
 
+        }
+
       }
 
       if (match == 0) {
@@ -350,7 +363,7 @@ void read_afl_environment(afl_state_t *afl, char **envp) {
 
   }
 
-  if (found) sleep(2);
+  if (found) { sleep(2); }
 
 }
 
@@ -358,18 +371,28 @@ void read_afl_environment(afl_state_t *afl, char **envp) {
 
 void afl_state_deinit(afl_state_t *afl) {
 
-  if (afl->post_deinit) afl->post_deinit(afl->post_data);
-  if (afl->in_place_resume) ck_free(afl->in_dir);
-  if (afl->sync_id) ck_free(afl->out_dir);
-  if (afl->pass_stats) ck_free(afl->pass_stats);
-  if (afl->orig_cmp_map) ck_free(afl->orig_cmp_map);
-
-  free(afl->out_buf);
-  free(afl->out_scratch_buf);
-  free(afl->eff_buf);
-  free(afl->in_buf);
-  free(afl->in_scratch_buf);
-  free(afl->ex_buf);
+  if (afl->post_deinit) { afl->post_deinit(afl->post_data); }
+  if (afl->in_place_resume) { ck_free(afl->in_dir); }
+  if (afl->sync_id) { ck_free(afl->out_dir); }
+  if (afl->pass_stats) { ck_free(afl->pass_stats); }
+  if (afl->orig_cmp_map) { ck_free(afl->orig_cmp_map); }
+
+  if (afl->out_buf) { free(afl->out_buf); }
+  if (afl->out_scratch_buf) { free(afl->out_scratch_buf); }
+  if (afl->eff_buf) { free(afl->eff_buf); }
+  if (afl->in_buf) { free(afl->in_buf); }
+  if (afl->in_scratch_buf) { free(afl->in_scratch_buf); }
+  if (afl->ex_buf) { free(afl->ex_buf); }
+
+  ck_free(afl->virgin_bits);
+  ck_free(afl->virgin_tmout);
+  ck_free(afl->virgin_crash);
+  ck_free(afl->var_bytes);
+  ck_free(afl->top_rated);
+  ck_free(afl->clean_trace);
+  ck_free(afl->clean_trace_custom);
+  ck_free(afl->first_trace);
+  ck_free(afl->map_tmp_buf);
 
   list_remove(&afl_states, afl);