fixed fuzzbench early exits (#182)

This commit is contained in:
Dominik Maier 2021-06-22 09:02:56 +02:00 committed by GitHub
parent 57d6df7951
commit 5c5a1cf2e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 7 deletions

View File

@ -8,10 +8,10 @@ use nix::{self, unistd::dup};
use std::os::unix::io::{AsRawFd, FromRawFd};
use std::{
env,
fs::{File, OpenOptions},
io,
io::Write,
fs::{self, File, OpenOptions},
io::{self, Write},
path::PathBuf,
process,
};
use libafl::{
@ -52,7 +52,7 @@ pub extern "C" fn fuzzer_main() {
// Needed only on no_std
//RegistryBuilder::register::<Tokens>();
let res = App::new("libafl_fuzzbench")
let res = match App::new("libafl_fuzzbench")
.version("0.4.0")
.author("AFLplusplus team")
.about("LibAFL-based fuzzer for Fuzzbench")
@ -91,7 +91,20 @@ pub extern "C" fn fuzzer_main() {
.about("Timeout for each individual execution, in milliseconds")
.default_value("1000"),
)
.get_matches();
.try_get_matches()
{
Ok(res) => res,
Err(err) => {
println!(
"Syntax: {}, [-x dictionary] corpus_dir seed_dir\n{:?}",
env::current_exe()
.unwrap_or_else(|_| "fuzzer".into())
.to_string_lossy(),
err.info,
);
return;
}
};
println!(
"Workdir: {:?}",
@ -100,11 +113,22 @@ pub extern "C" fn fuzzer_main() {
// For fuzzbench, crashes and finds are inside the same `corpus` directory, in the "queue" and "crashes" subdir.
let mut out_dir = PathBuf::from(res.value_of("out").unwrap().to_string());
if fs::create_dir(&out_dir).is_err() {
println!("Out dir at {:?} already exists.", &out_dir);
if !out_dir.is_dir() {
println!("Out dir at {:?} is not a valid directory!", &out_dir);
return;
}
}
let mut crashes = out_dir.clone();
crashes.push("crashes");
out_dir.push("queue");
let in_dir = PathBuf::from(res.value_of("in").unwrap().to_string());
if !in_dir.is_dir() {
println!("In dir at {:?} is not a valid directory!", &in_dir);
return;
}
let tokens = res.value_of("tokens").map(PathBuf::from);
@ -287,7 +311,10 @@ fn fuzz(
if state.corpus().count() < 1 {
state
.load_initial_inputs(&mut fuzzer, &mut executor, &mut mgr, &[seed_dir.clone()])
.unwrap_or_else(|_| panic!("Failed to load initial corpus at {:?}", &seed_dir));
.unwrap_or_else(|_| {
println!("Failed to load initial corpus at {:?}", &seed_dir);
process::exit(0);
});
println!("We imported {} inputs from disk.", state.corpus().count());
}

View File

@ -303,7 +303,8 @@ mod unix_signal_handler {
unsafe impl Send for InProcessExecutorHandlerData {}
unsafe impl Sync for InProcessExecutorHandlerData {}
pub unsafe fn nop_handler(
/// A handler that does nothing.
pub fn nop_handler(
_signal: Signal,
_info: siginfo_t,
_context: &mut ucontext_t,