mirror of
https://github.com/AFLplusplus/AFLplusplus.git
synced 2025-06-15 03:18:07 +00:00
Merge remote-tracking branch 'origin/dev' into atnwalk
# Conflicts: # include/afl-fuzz.h # src/afl-fuzz-run.c
This commit is contained in:
@ -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);
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
Reference in New Issue
Block a user