Merge remote-tracking branch 'origin/dev' into atnwalk

# Conflicts:
#	include/afl-fuzz.h
#	src/afl-fuzz-run.c
This commit is contained in:
Maik Betka
2023-04-21 11:31:22 +02:00
209 changed files with 6315 additions and 2491 deletions

View File

@ -9,7 +9,7 @@
Andrea Fioraldi <andreafioraldi@gmail.com>
Copyright 2016, 2017 Google Inc. All rights reserved.
Copyright 2019-2022 AFLplusplus Project. All rights reserved.
Copyright 2019-2023 AFLplusplus Project. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -23,6 +23,8 @@
*/
#include <signal.h>
#include <limits.h>
#include "afl-fuzz.h"
#include "envs.h"
@ -99,6 +101,7 @@ void afl_state_init(afl_state_t *afl, uint32_t map_size) {
afl->hang_tmout = EXEC_TIMEOUT;
afl->exit_on_time = 0;
afl->stats_update_freq = 1;
afl->stats_file_update_freq_msecs = STATS_UPDATE_SEC * 1000;
afl->stats_avg_exec = 0;
afl->skip_deterministic = 1;
afl->sync_time = SYNC_TIME;
@ -203,6 +206,13 @@ void read_afl_environment(afl_state_t *afl, char **envp) {
afl->afl_env.afl_no_affinity =
get_afl_env(afl_environment_variables[i]) ? 1 : 0;
} else if (!strncmp(env, "AFL_NO_WARN_INSTABILITY",
afl_environment_variable_len)) {
afl->afl_env.afl_no_warn_instability =
get_afl_env(afl_environment_variables[i]) ? 1 : 0;
} else if (!strncmp(env, "AFL_TRY_AFFINITY",
afl_environment_variable_len)) {
@ -291,6 +301,13 @@ void read_afl_environment(afl_state_t *afl, char **envp) {
afl->afl_env.afl_ignore_problems =
get_afl_env(afl_environment_variables[i]) ? 1 : 0;
} else if (!strncmp(env, "AFL_IGNORE_TIMEOUTS",
afl_environment_variable_len)) {
afl->afl_env.afl_ignore_timeouts =
get_afl_env(afl_environment_variables[i]) ? 1 : 0;
} else if (!strncmp(env, "AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES",
afl_environment_variable_len)) {
@ -494,7 +511,14 @@ void read_afl_environment(afl_state_t *afl, char **envp) {
afl_environment_variable_len)) {
afl->afl_env.afl_kill_signal =
afl->afl_env.afl_child_kill_signal =
(u8 *)get_afl_env(afl_environment_variables[i]);
} else if (!strncmp(env, "AFL_FORK_SERVER_KILL_SIGNAL",
afl_environment_variable_len)) {
afl->afl_env.afl_fsrv_kill_signal =
(u8 *)get_afl_env(afl_environment_variables[i]);
} else if (!strncmp(env, "AFL_TARGET_ENV",
@ -550,6 +574,26 @@ void read_afl_environment(afl_state_t *afl, char **envp) {
}
} else if (!strncmp(env, "AFL_FUZZER_STATS_UPDATE_INTERVAL",
afl_environment_variable_len)) {
u64 stats_update_freq_sec =
strtoull(get_afl_env(afl_environment_variables[i]), NULL, 0);
if (stats_update_freq_sec >= UINT_MAX ||
0 == stats_update_freq_sec) {
WARNF(
"Incorrect value given to AFL_FUZZER_STATS_UPDATE_INTERVAL, "
"using default of %d seconds\n",
STATS_UPDATE_SEC);
} else {
afl->stats_file_update_freq_msecs = stats_update_freq_sec * 1000;
}
}
} else {
@ -611,10 +655,14 @@ void read_afl_environment(afl_state_t *afl, char **envp) {
}
if (afl->afl_env.afl_pizza_mode) {
if (afl->afl_env.afl_pizza_mode > 0) {
afl->pizza_is_served = 1;
} else if (afl->afl_env.afl_pizza_mode < 0) {
OKF("Pizza easter egg mode is now disabled.");
}
if (issue_detected) { sleep(2); }
@ -665,8 +713,17 @@ void afl_states_stop(void) {
LIST_FOREACH(&afl_states, afl_state_t, {
if (el->fsrv.child_pid > 0) kill(el->fsrv.child_pid, el->fsrv.kill_signal);
if (el->fsrv.fsrv_pid > 0) kill(el->fsrv.fsrv_pid, el->fsrv.kill_signal);
/* NOTE: We need to make sure that the parent (the forkserver) reap the
* child (see below). */
if (el->fsrv.child_pid > 0)
kill(el->fsrv.child_pid, el->fsrv.child_kill_signal);
if (el->fsrv.fsrv_pid > 0) {
kill(el->fsrv.fsrv_pid, el->fsrv.fsrv_kill_signal);
/* Make sure the forkserver does not end up as zombie. */
waitpid(el->fsrv.fsrv_pid, NULL, 0);
}
});