Fixes forkersever_simple issue on Macs (#623)
* Fixes forkersever_simple issue on Macs * fixes formatting issue * Fixes formatting issue
This commit is contained in:
parent
eb70c8025b
commit
92196cc9be
@ -2,7 +2,7 @@ use libafl::{
|
|||||||
bolts::{
|
bolts::{
|
||||||
current_nanos,
|
current_nanos,
|
||||||
rands::StdRand,
|
rands::StdRand,
|
||||||
shmem::{ShMem, ShMemProvider, StdShMemProvider},
|
shmem::{ShMem, ShMemProvider},
|
||||||
tuples::tuple_list,
|
tuples::tuple_list,
|
||||||
AsMutSlice,
|
AsMutSlice,
|
||||||
},
|
},
|
||||||
@ -25,12 +25,22 @@ use libafl::{
|
|||||||
};
|
};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
#[cfg(not(target_vendor = "apple"))]
|
||||||
|
use libafl::bolts::shmem::StdShMemProvider;
|
||||||
|
#[cfg(target_vendor = "apple")]
|
||||||
|
use libafl::bolts::shmem::UnixShMemProvider;
|
||||||
|
|
||||||
#[allow(clippy::similar_names)]
|
#[allow(clippy::similar_names)]
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
const MAP_SIZE: usize = 65536;
|
const MAP_SIZE: usize = 65536;
|
||||||
|
|
||||||
//Coverage map shared between observer and executor
|
//Coverage map shared between observer and executor
|
||||||
|
#[cfg(target_vendor = "apple")]
|
||||||
|
let mut shmem_provider = UnixShMemProvider::new().unwrap();
|
||||||
|
|
||||||
|
#[cfg(not(target_vendor = "apple"))]
|
||||||
let mut shmem_provider = StdShMemProvider::new().unwrap();
|
let mut shmem_provider = StdShMemProvider::new().unwrap();
|
||||||
|
|
||||||
let mut shmem = shmem_provider.new_shmem(MAP_SIZE).unwrap();
|
let mut shmem = shmem_provider.new_shmem(MAP_SIZE).unwrap();
|
||||||
//let the forkserver know the shmid
|
//let the forkserver know the shmid
|
||||||
shmem.write_to_env("__AFL_SHM_ID").unwrap();
|
shmem.write_to_env("__AFL_SHM_ID").unwrap();
|
||||||
@ -87,7 +97,7 @@ pub fn main() {
|
|||||||
let mut fuzzer = StdFuzzer::new(scheduler, feedback, objective);
|
let mut fuzzer = StdFuzzer::new(scheduler, feedback, objective);
|
||||||
|
|
||||||
let mut executor = ForkserverExecutor::builder()
|
let mut executor = ForkserverExecutor::builder()
|
||||||
.program("./target/release/program".to_string())
|
.program("./target/release/program")
|
||||||
.arg_input_file_std()
|
.arg_input_file_std()
|
||||||
.shmem_provider(&mut shmem_provider)
|
.shmem_provider(&mut shmem_provider)
|
||||||
.build(tuple_list!(bt_observer, edges_observer))
|
.build(tuple_list!(bt_observer, edges_observer))
|
||||||
|
@ -4,7 +4,7 @@ use libafl::{
|
|||||||
bolts::{
|
bolts::{
|
||||||
current_nanos,
|
current_nanos,
|
||||||
rands::StdRand,
|
rands::StdRand,
|
||||||
shmem::{ShMem, ShMemProvider, StdShMemProvider},
|
shmem::{ShMem, ShMemProvider},
|
||||||
tuples::{tuple_list, Merge},
|
tuples::{tuple_list, Merge},
|
||||||
AsMutSlice,
|
AsMutSlice,
|
||||||
},
|
},
|
||||||
@ -25,6 +25,12 @@ use libafl::{
|
|||||||
use nix::sys::signal::Signal;
|
use nix::sys::signal::Signal;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
#[cfg(target_vendor = "apple")]
|
||||||
|
use libafl::bolts::shmem::UnixShMemProvider;
|
||||||
|
|
||||||
|
#[cfg(not(target_vendor = "apple"))]
|
||||||
|
use libafl::bolts::shmem::StdShMemProvider;
|
||||||
|
|
||||||
#[allow(clippy::similar_names)]
|
#[allow(clippy::similar_names)]
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
let res = App::new("forkserver_simple")
|
let res = App::new("forkserver_simple")
|
||||||
@ -74,7 +80,12 @@ pub fn main() {
|
|||||||
const MAP_SIZE: usize = 65536;
|
const MAP_SIZE: usize = 65536;
|
||||||
|
|
||||||
// The default, OS-specific privider for shared memory
|
// The default, OS-specific privider for shared memory
|
||||||
|
#[cfg(target_vendor = "apple")]
|
||||||
|
let mut shmem_provider = UnixShMemProvider::new().unwrap();
|
||||||
|
|
||||||
|
#[cfg(not(target_vendor = "apple"))]
|
||||||
let mut shmem_provider = StdShMemProvider::new().unwrap();
|
let mut shmem_provider = StdShMemProvider::new().unwrap();
|
||||||
|
|
||||||
// The coverage map shared between observer and executor
|
// The coverage map shared between observer and executor
|
||||||
let mut shmem = shmem_provider.new_shmem(MAP_SIZE).unwrap();
|
let mut shmem = shmem_provider.new_shmem(MAP_SIZE).unwrap();
|
||||||
// let the forkserver know the shmid
|
// let the forkserver know the shmid
|
||||||
|
@ -678,6 +678,44 @@ impl<'a, SP> ForkserverExecutorBuilder<'a, SP> {
|
|||||||
has_asan_observer: None, // initialized on first use
|
has_asan_observer: None, // initialized on first use
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Use autodict?
|
||||||
|
#[must_use]
|
||||||
|
pub fn autotokens(mut self, tokens: &'a mut Tokens) -> Self {
|
||||||
|
self.autotokens = Some(tokens);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
#[must_use]
|
||||||
|
/// Parse afl style command line
|
||||||
|
pub fn parse_afl_cmdline<IT, O>(mut self, args: IT) -> Self
|
||||||
|
where
|
||||||
|
IT: IntoIterator<Item = O>,
|
||||||
|
O: AsRef<OsStr>,
|
||||||
|
{
|
||||||
|
let mut res = vec![];
|
||||||
|
let mut use_stdin = true;
|
||||||
|
|
||||||
|
for item in args {
|
||||||
|
if item.as_ref() == "@@" && use_stdin {
|
||||||
|
use_stdin = false;
|
||||||
|
res.push(OsString::from(".cur_input"));
|
||||||
|
} else if let Some(name) = &self.out_filename {
|
||||||
|
if name == item.as_ref() && use_stdin {
|
||||||
|
use_stdin = false;
|
||||||
|
res.push(name.clone());
|
||||||
|
} else {
|
||||||
|
res.push(item.as_ref().to_os_string());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
res.push(item.as_ref().to_os_string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.arguments = res;
|
||||||
|
self.use_stdin = use_stdin;
|
||||||
|
self
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> ForkserverExecutorBuilder<'a, StdShMemProvider> {
|
impl<'a> ForkserverExecutorBuilder<'a, StdShMemProvider> {
|
||||||
@ -777,37 +815,6 @@ impl<'a> ForkserverExecutorBuilder<'a, StdShMemProvider> {
|
|||||||
self.arg_input_file(OUTFILE_STD)
|
self.arg_input_file(OUTFILE_STD)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[must_use]
|
|
||||||
/// Parse afl style command line
|
|
||||||
pub fn parse_afl_cmdline<IT, O>(mut self, args: IT) -> Self
|
|
||||||
where
|
|
||||||
IT: IntoIterator<Item = O>,
|
|
||||||
O: AsRef<OsStr>,
|
|
||||||
{
|
|
||||||
let mut res = vec![];
|
|
||||||
let mut use_stdin = true;
|
|
||||||
|
|
||||||
for item in args {
|
|
||||||
if item.as_ref() == "@@" && use_stdin {
|
|
||||||
use_stdin = false;
|
|
||||||
res.push(OsString::from(".cur_input"));
|
|
||||||
} else if let Some(name) = &self.out_filename {
|
|
||||||
if name == item.as_ref() && use_stdin {
|
|
||||||
use_stdin = false;
|
|
||||||
res.push(name.clone());
|
|
||||||
} else {
|
|
||||||
res.push(item.as_ref().to_os_string());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
res.push(item.as_ref().to_os_string());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
self.arguments = res;
|
|
||||||
self.use_stdin = use_stdin;
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
/// If `debug_child` is set, the child will print to `stdout`/`stderr`.
|
/// If `debug_child` is set, the child will print to `stdout`/`stderr`.
|
||||||
pub fn debug_child(mut self, debug_child: bool) -> Self {
|
pub fn debug_child(mut self, debug_child: bool) -> Self {
|
||||||
@ -815,13 +822,6 @@ impl<'a> ForkserverExecutorBuilder<'a, StdShMemProvider> {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Use autodict?
|
|
||||||
#[must_use]
|
|
||||||
pub fn autotokens(mut self, tokens: &'a mut Tokens) -> Self {
|
|
||||||
self.autotokens = Some(tokens);
|
|
||||||
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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user