Fixes forkersever_simple issue on Macs (#623)

* Fixes forkersever_simple issue on Macs

* fixes formatting issue

* Fixes formatting issue
This commit is contained in:
WilliamParks 2022-05-07 22:17:55 -04:00 committed by GitHub
parent eb70c8025b
commit 92196cc9be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 62 additions and 41 deletions

View File

@ -2,7 +2,7 @@ use libafl::{
bolts::{
current_nanos,
rands::StdRand,
shmem::{ShMem, ShMemProvider, StdShMemProvider},
shmem::{ShMem, ShMemProvider},
tuples::tuple_list,
AsMutSlice,
},
@ -25,12 +25,22 @@ use libafl::{
};
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)]
pub fn main() {
const MAP_SIZE: usize = 65536;
//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 = shmem_provider.new_shmem(MAP_SIZE).unwrap();
//let the forkserver know the shmid
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 executor = ForkserverExecutor::builder()
.program("./target/release/program".to_string())
.program("./target/release/program")
.arg_input_file_std()
.shmem_provider(&mut shmem_provider)
.build(tuple_list!(bt_observer, edges_observer))

View File

@ -4,7 +4,7 @@ use libafl::{
bolts::{
current_nanos,
rands::StdRand,
shmem::{ShMem, ShMemProvider, StdShMemProvider},
shmem::{ShMem, ShMemProvider},
tuples::{tuple_list, Merge},
AsMutSlice,
},
@ -25,6 +25,12 @@ use libafl::{
use nix::sys::signal::Signal;
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)]
pub fn main() {
let res = App::new("forkserver_simple")
@ -74,7 +80,12 @@ pub fn main() {
const MAP_SIZE: usize = 65536;
// 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();
// The coverage map shared between observer and executor
let mut shmem = shmem_provider.new_shmem(MAP_SIZE).unwrap();
// let the forkserver know the shmid

View File

@ -678,6 +678,44 @@ impl<'a, SP> ForkserverExecutorBuilder<'a, SP> {
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> {
@ -777,37 +815,6 @@ impl<'a> ForkserverExecutorBuilder<'a, StdShMemProvider> {
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]
/// If `debug_child` is set, the child will print to `stdout`/`stderr`.
pub fn debug_child(mut self, debug_child: bool) -> Self {
@ -815,13 +822,6 @@ impl<'a> ForkserverExecutorBuilder<'a, StdShMemProvider> {
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.
pub fn shmem_provider<SP: ShMemProvider>(
self,