Set persistent mode env variables. (#852)
* persistnt mode envs * clp * clpgit add -u!
This commit is contained in:
parent
0307dadcd1
commit
5b75b6b8ac
@ -170,8 +170,10 @@ pub struct Forkserver {
|
|||||||
last_run_timed_out: i32,
|
last_run_timed_out: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::fn_params_excessive_bools)]
|
||||||
impl Forkserver {
|
impl Forkserver {
|
||||||
/// Create a new [`Forkserver`]
|
/// Create a new [`Forkserver`]
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn new(
|
pub fn new(
|
||||||
target: OsString,
|
target: OsString,
|
||||||
args: Vec<OsString>,
|
args: Vec<OsString>,
|
||||||
@ -179,6 +181,8 @@ impl Forkserver {
|
|||||||
input_filefd: RawFd,
|
input_filefd: RawFd,
|
||||||
use_stdin: bool,
|
use_stdin: bool,
|
||||||
memlimit: u64,
|
memlimit: u64,
|
||||||
|
is_persistent: bool,
|
||||||
|
is_deferred_frksrv: bool,
|
||||||
debug_output: bool,
|
debug_output: bool,
|
||||||
) -> Result<Self, Error> {
|
) -> Result<Self, Error> {
|
||||||
let mut st_pipe = Pipe::new().unwrap();
|
let mut st_pipe = Pipe::new().unwrap();
|
||||||
@ -190,12 +194,26 @@ impl Forkserver {
|
|||||||
(Stdio::null(), Stdio::null())
|
(Stdio::null(), Stdio::null())
|
||||||
};
|
};
|
||||||
|
|
||||||
match Command::new(target)
|
let mut command = Command::new(target);
|
||||||
|
|
||||||
|
// Setup args, stdio
|
||||||
|
command
|
||||||
.args(args)
|
.args(args)
|
||||||
.stdin(Stdio::null())
|
.stdin(Stdio::null())
|
||||||
.stdout(stdout)
|
.stdout(stdout)
|
||||||
.stderr(stderr)
|
.stderr(stderr);
|
||||||
.env("LD_BIND_LAZY", "1")
|
|
||||||
|
// Persistent, deferred forkserver
|
||||||
|
if is_persistent {
|
||||||
|
command.env("__AFL_PERSISTENT", "1");
|
||||||
|
}
|
||||||
|
|
||||||
|
if is_deferred_frksrv {
|
||||||
|
command.env("__AFL_DEFER_FORKSRV", "1");
|
||||||
|
}
|
||||||
|
|
||||||
|
match command
|
||||||
|
.env("LD_BIND_NOW", "1")
|
||||||
.env("ASAN_OPTIONS", get_asan_runtime_flags_with_log_path())
|
.env("ASAN_OPTIONS", get_asan_runtime_flags_with_log_path())
|
||||||
.envs(envs)
|
.envs(envs)
|
||||||
.setlimit(memlimit)
|
.setlimit(memlimit)
|
||||||
@ -543,12 +561,15 @@ where
|
|||||||
|
|
||||||
/// The builder for `ForkserverExecutor`
|
/// The builder for `ForkserverExecutor`
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
#[allow(clippy::struct_excessive_bools)]
|
||||||
pub struct ForkserverExecutorBuilder<'a, SP> {
|
pub struct ForkserverExecutorBuilder<'a, SP> {
|
||||||
program: Option<OsString>,
|
program: Option<OsString>,
|
||||||
arguments: Vec<OsString>,
|
arguments: Vec<OsString>,
|
||||||
envs: Vec<(OsString, OsString)>,
|
envs: Vec<(OsString, OsString)>,
|
||||||
debug_child: bool,
|
debug_child: bool,
|
||||||
use_stdin: bool,
|
use_stdin: bool,
|
||||||
|
is_persistent: bool,
|
||||||
|
is_deferred_frksrv: bool,
|
||||||
autotokens: Option<&'a mut Tokens>,
|
autotokens: Option<&'a mut Tokens>,
|
||||||
input_filename: Option<OsString>,
|
input_filename: Option<OsString>,
|
||||||
shmem_provider: Option<&'a mut SP>,
|
shmem_provider: Option<&'a mut SP>,
|
||||||
@ -595,6 +616,8 @@ impl<'a, SP> ForkserverExecutorBuilder<'a, SP> {
|
|||||||
input_file.as_raw_fd(),
|
input_file.as_raw_fd(),
|
||||||
self.use_stdin,
|
self.use_stdin,
|
||||||
0,
|
0,
|
||||||
|
self.is_persistent,
|
||||||
|
self.is_deferred_frksrv,
|
||||||
self.debug_child,
|
self.debug_child,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
@ -740,6 +763,8 @@ impl<'a> ForkserverExecutorBuilder<'a, StdShMemProvider> {
|
|||||||
envs: vec![],
|
envs: vec![],
|
||||||
debug_child: false,
|
debug_child: false,
|
||||||
use_stdin: true,
|
use_stdin: true,
|
||||||
|
is_persistent: false,
|
||||||
|
is_deferred_frksrv: false,
|
||||||
autotokens: None,
|
autotokens: None,
|
||||||
input_filename: None,
|
input_filename: None,
|
||||||
shmem_provider: None,
|
shmem_provider: None,
|
||||||
@ -830,6 +855,20 @@ impl<'a> ForkserverExecutorBuilder<'a, StdShMemProvider> {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[must_use]
|
||||||
|
/// Call this if you want to run it under persistent mode; default is false
|
||||||
|
pub fn is_persistent(mut self, is_persistent: bool) -> Self {
|
||||||
|
self.is_persistent = is_persistent;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
#[must_use]
|
||||||
|
/// Call this if the harness uses deferred forkserver mode; default is false
|
||||||
|
pub fn is_deferred_frksrv(mut self, is_deferred_frksrv: bool) -> Self {
|
||||||
|
self.is_deferred_frksrv = is_deferred_frksrv;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// Shmem provider for forkserver's shared memory testcase feature.
|
/// Shmem provider for forkserver's shared memory testcase feature.
|
||||||
pub fn shmem_provider<SP: ShMemProvider>(
|
pub fn shmem_provider<SP: ShMemProvider>(
|
||||||
self,
|
self,
|
||||||
@ -841,6 +880,8 @@ impl<'a> ForkserverExecutorBuilder<'a, StdShMemProvider> {
|
|||||||
envs: self.envs,
|
envs: self.envs,
|
||||||
debug_child: self.debug_child,
|
debug_child: self.debug_child,
|
||||||
use_stdin: self.use_stdin,
|
use_stdin: self.use_stdin,
|
||||||
|
is_persistent: self.is_persistent,
|
||||||
|
is_deferred_frksrv: self.is_deferred_frksrv,
|
||||||
autotokens: self.autotokens,
|
autotokens: self.autotokens,
|
||||||
input_filename: self.input_filename,
|
input_filename: self.input_filename,
|
||||||
shmem_provider: Some(shmem_provider),
|
shmem_provider: Some(shmem_provider),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user