Example fuzzers with less UB (#1212)
* Example fuzzers with even less UB * more less ub, fixes * unused dep
This commit is contained in:
parent
cdd3d8ace0
commit
c881dc996d
1
.gitignore
vendored
1
.gitignore
vendored
@ -47,6 +47,7 @@ a
|
|||||||
forkserver_test
|
forkserver_test
|
||||||
__pycache__
|
__pycache__
|
||||||
*.lafl_lock
|
*.lafl_lock
|
||||||
|
*.metadata
|
||||||
|
|
||||||
*atomic_file_testfile*
|
*atomic_file_testfile*
|
||||||
**/libxml2
|
**/libxml2
|
||||||
|
@ -28,10 +28,11 @@ use libafl::{
|
|||||||
|
|
||||||
/// Coverage map with explicit assignments due to the lack of instrumentation
|
/// Coverage map with explicit assignments due to the lack of instrumentation
|
||||||
static mut SIGNALS: [u8; 16] = [0; 16];
|
static mut SIGNALS: [u8; 16] = [0; 16];
|
||||||
|
static mut SIGNALS_PTR: *mut u8 = unsafe { SIGNALS.as_mut_ptr() };
|
||||||
/*
|
/*
|
||||||
/// Assign a signal to the signals map
|
/// Assign a signal to the signals map
|
||||||
fn signals_set(idx: usize) {
|
fn signals_set(idx: usize) {
|
||||||
unsafe { SIGNALS[idx] = 1 };
|
unsafe { std::ptr::write(SIGNALS_PTR.add(idx), 1) };
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -57,7 +58,7 @@ pub fn main() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Create an observation channel using the signals map
|
// Create an observation channel using the signals map
|
||||||
let observer = unsafe { StdMapObserver::new("signals", &mut SIGNALS) };
|
let observer = unsafe { StdMapObserver::from_mut_ptr("signals", SIGNALS_PTR, SIGNALS.len()) };
|
||||||
|
|
||||||
// Feedback to rate the interestingness of an input
|
// Feedback to rate the interestingness of an input
|
||||||
let mut feedback = MaxMapFeedback::new(&observer);
|
let mut feedback = MaxMapFeedback::new(&observer);
|
||||||
|
@ -1,15 +1,16 @@
|
|||||||
use std::path::PathBuf;
|
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
use std::ptr::write_volatile;
|
use std::ptr::write_volatile;
|
||||||
|
use std::{path::PathBuf, ptr::write};
|
||||||
|
|
||||||
use libafl::prelude::*;
|
use libafl::prelude::*;
|
||||||
|
|
||||||
/// Coverage map with explicit assignments due to the lack of instrumentation
|
/// Coverage map with explicit assignments due to the lack of instrumentation
|
||||||
static mut SIGNALS: [u8; 16] = [0; 16];
|
static mut SIGNALS: [u8; 16] = [0; 16];
|
||||||
|
static mut SIGNALS_PTR: *mut u8 = unsafe { SIGNALS.as_mut_ptr() };
|
||||||
|
|
||||||
/// Assign a signal to the signals map
|
/// Assign a signal to the signals map
|
||||||
fn signals_set(idx: usize) {
|
fn signals_set(idx: usize) {
|
||||||
unsafe { SIGNALS[idx] = 1 };
|
unsafe { write(SIGNALS_PTR.add(idx), 1) };
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(clippy::similar_names)]
|
#[allow(clippy::similar_names)]
|
||||||
@ -32,8 +33,7 @@ pub fn main() -> Result<(), Error> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Create an observation channel using the signals map
|
// Create an observation channel using the signals map
|
||||||
let observer =
|
let observer = unsafe { StdMapObserver::from_mut_ptr("signals", SIGNALS_PTR, SIGNALS.len()) };
|
||||||
unsafe { StdMapObserver::from_mut_ptr("signals", SIGNALS.as_mut_ptr(), SIGNALS.len()) };
|
|
||||||
|
|
||||||
let factory = MapEqualityFactory::with_observer(&observer);
|
let factory = MapEqualityFactory::with_observer(&observer);
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ use std::ptr::write_volatile;
|
|||||||
|
|
||||||
use libafl::{
|
use libafl::{
|
||||||
bolts::{current_nanos, rands::StdRand, tuples::tuple_list},
|
bolts::{current_nanos, rands::StdRand, tuples::tuple_list},
|
||||||
corpus::{InMemoryCorpus, InMemoryOnDiskCorpus, OnDiskCorpus},
|
corpus::{InMemoryCorpus, OnDiskCorpus},
|
||||||
events::SimpleEventManager,
|
events::SimpleEventManager,
|
||||||
executors::{inprocess::InProcessExecutor, ExitKind},
|
executors::{inprocess::InProcessExecutor, ExitKind},
|
||||||
feedback_or,
|
feedback_or,
|
||||||
@ -24,10 +24,11 @@ use libafl::{
|
|||||||
|
|
||||||
/// Coverage map with explicit assignments due to the lack of instrumentation
|
/// Coverage map with explicit assignments due to the lack of instrumentation
|
||||||
static mut SIGNALS: [u8; 16] = [0; 16];
|
static mut SIGNALS: [u8; 16] = [0; 16];
|
||||||
|
static mut SIGNALS_PTR: *mut u8 = unsafe { SIGNALS.as_mut_ptr() };
|
||||||
/*
|
/*
|
||||||
/// Assign a signal to the signals map
|
/// Assign a signal to the signals map
|
||||||
fn signals_set(idx: usize) {
|
fn signals_set(idx: usize) {
|
||||||
unsafe { SIGNALS[idx] = 1 };
|
unsafe { str::ptr::write(SIGNALS_PTR.add(idx), 1) };
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -46,7 +47,7 @@ pub fn main() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Create an observation channel using the signals map
|
// Create an observation channel using the signals map
|
||||||
let observer = unsafe { StdMapObserver::new("signals", &mut SIGNALS) };
|
let observer = unsafe { StdMapObserver::from_mut_ptr("signals", SIGNALS_PTR, SIGNALS.len()) };
|
||||||
|
|
||||||
// Feedback to rate the interestingness of an input
|
// Feedback to rate the interestingness of an input
|
||||||
let mut feedback = feedback_or!(
|
let mut feedback = feedback_or!(
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
use std::ptr::write_volatile;
|
use std::ptr::write_volatile;
|
||||||
use std::{fs, io::Read, path::PathBuf};
|
use std::{fs, io::Read, path::PathBuf, ptr::write};
|
||||||
|
|
||||||
use libafl::{
|
use libafl::{
|
||||||
bolts::{current_nanos, rands::StdRand, tuples::tuple_list},
|
bolts::{current_nanos, rands::StdRand, tuples::tuple_list},
|
||||||
@ -20,10 +20,12 @@ use libafl::{
|
|||||||
|
|
||||||
/// Coverage map with explicit assignments due to the lack of instrumentation
|
/// Coverage map with explicit assignments due to the lack of instrumentation
|
||||||
static mut SIGNALS: [u8; 16] = [0; 16];
|
static mut SIGNALS: [u8; 16] = [0; 16];
|
||||||
|
static mut SIGNALS_PTR: *mut u8 = unsafe { SIGNALS.as_mut_ptr() };
|
||||||
|
|
||||||
/*
|
/*
|
||||||
/// Assign a signal to the signals map
|
/// Assign a signal to the signals map
|
||||||
fn signals_set(idx: usize) {
|
fn signals_set(idx: usize) {
|
||||||
unsafe { SIGNALS[idx] = 1 };
|
unsafe { write(SIGNALS_PTR.add(idx), 1) };
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -65,8 +67,7 @@ pub fn main() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Create an observation channel using the signals map
|
// Create an observation channel using the signals map
|
||||||
let observer =
|
let observer = unsafe { StdMapObserver::from_mut_ptr("signals", SIGNALS_PTR, SIGNALS.len()) };
|
||||||
unsafe { StdMapObserver::from_mut_ptr("signals", SIGNALS.as_mut_ptr(), SIGNALS.len()) };
|
|
||||||
|
|
||||||
// Feedback to rate the interestingness of an input
|
// Feedback to rate the interestingness of an input
|
||||||
let mut feedback = MaxMapFeedback::new(&observer);
|
let mut feedback = MaxMapFeedback::new(&observer);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use std::path::PathBuf;
|
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
use std::ptr::write_volatile;
|
use std::ptr::write_volatile;
|
||||||
|
use std::{path::PathBuf, ptr::write};
|
||||||
|
|
||||||
use libafl::{
|
use libafl::{
|
||||||
bolts::{
|
bolts::{
|
||||||
@ -29,11 +29,11 @@ use libafl::{
|
|||||||
pub fn main() {
|
pub fn main() {
|
||||||
let mut shmem_provider = unix_shmem::UnixShMemProvider::new().unwrap();
|
let mut shmem_provider = unix_shmem::UnixShMemProvider::new().unwrap();
|
||||||
let mut signals = shmem_provider.new_shmem(16).unwrap();
|
let mut signals = shmem_provider.new_shmem(16).unwrap();
|
||||||
let mut signals_clone = signals.clone();
|
let signals_len = signals.as_slice().len();
|
||||||
|
let signals_ptr = signals.as_mut_slice().as_mut_ptr();
|
||||||
|
|
||||||
let mut signals_set = |idx: usize| {
|
let signals_set = |idx: usize| {
|
||||||
let a = signals.as_mut_slice();
|
unsafe { write(signals_ptr.add(idx), 1) };
|
||||||
a[idx] = 1;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// The closure that we want to fuzz
|
// The closure that we want to fuzz
|
||||||
@ -64,7 +64,7 @@ pub fn main() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Create an observation channel using the signals map
|
// Create an observation channel using the signals map
|
||||||
let observer = unsafe { StdMapObserver::new("signals", signals_clone.as_mut_slice()) };
|
let observer = unsafe { StdMapObserver::from_mut_ptr("signals", signals_ptr, signals_len) };
|
||||||
// Create a stacktrace observer to add the observers tuple
|
// Create a stacktrace observer to add the observers tuple
|
||||||
|
|
||||||
// Feedback to rate the interestingness of an input, obtained by ANDing the interestingness of both feedbacks
|
// Feedback to rate the interestingness of an input, obtained by ANDing the interestingness of both feedbacks
|
||||||
|
@ -8,6 +8,7 @@ extern crate alloc;
|
|||||||
use alloc::ffi::CString;
|
use alloc::ffi::CString;
|
||||||
#[cfg(not(any(windows)))]
|
#[cfg(not(any(windows)))]
|
||||||
use core::panic::PanicInfo;
|
use core::panic::PanicInfo;
|
||||||
|
use core::ptr::write;
|
||||||
|
|
||||||
use libafl::{
|
use libafl::{
|
||||||
bolts::{current_nanos, rands::StdRand, tuples::tuple_list, AsSlice},
|
bolts::{current_nanos, rands::StdRand, tuples::tuple_list, AsSlice},
|
||||||
@ -46,10 +47,11 @@ fn panic(_info: &PanicInfo) -> ! {
|
|||||||
|
|
||||||
/// Coverage map with explicit assignments due to the lack of instrumentation
|
/// Coverage map with explicit assignments due to the lack of instrumentation
|
||||||
static mut SIGNALS: [u8; 16] = [0; 16];
|
static mut SIGNALS: [u8; 16] = [0; 16];
|
||||||
|
static mut SIGNALS_PTR: *mut u8 = unsafe { SIGNALS.as_mut_ptr() };
|
||||||
|
|
||||||
/// Assign a signal to the signals map
|
/// Assign a signal to the signals map
|
||||||
fn signals_set(idx: usize) {
|
fn signals_set(idx: usize) {
|
||||||
unsafe { SIGNALS[idx] = 1 };
|
unsafe { write(SIGNALS_PTR.add(idx), 1) };
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Provide custom time in `no_std` environment
|
/// Provide custom time in `no_std` environment
|
||||||
@ -85,7 +87,7 @@ pub extern "C" fn main(_argc: isize, _argv: *const *const u8) -> isize {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Create an observation channel using the signals map
|
// Create an observation channel using the signals map
|
||||||
let observer = unsafe { StdMapObserver::new("signals", &mut SIGNALS) };
|
let observer = unsafe { StdMapObserver::from_mut_ptr("signals", SIGNALS_PTR, SIGNALS.len()) };
|
||||||
|
|
||||||
// Feedback to rate the interestingness of an input
|
// Feedback to rate the interestingness of an input
|
||||||
let mut feedback = MaxMapFeedback::new(&observer);
|
let mut feedback = MaxMapFeedback::new(&observer);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use std::path::PathBuf;
|
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
use std::ptr::write_volatile;
|
use std::ptr::write_volatile;
|
||||||
|
use std::{path::PathBuf, ptr::write};
|
||||||
|
|
||||||
use libafl::{
|
use libafl::{
|
||||||
bolts::{
|
bolts::{
|
||||||
@ -30,12 +30,12 @@ use libafl::{
|
|||||||
pub fn main() {
|
pub fn main() {
|
||||||
let mut shmem_provider = unix_shmem::UnixShMemProvider::new().unwrap();
|
let mut shmem_provider = unix_shmem::UnixShMemProvider::new().unwrap();
|
||||||
let mut signals = shmem_provider.new_shmem(16).unwrap();
|
let mut signals = shmem_provider.new_shmem(16).unwrap();
|
||||||
let mut signals_clone = signals.clone();
|
let signals_len = signals.len();
|
||||||
|
let signals_ptr = signals.as_mut_slice().as_mut_ptr();
|
||||||
let mut bt = shmem_provider.new_shmem_object::<Option<u64>>().unwrap();
|
let mut bt = shmem_provider.new_shmem_object::<Option<u64>>().unwrap();
|
||||||
|
|
||||||
let mut signals_set = |idx: usize| {
|
let signals_set = |idx: usize| {
|
||||||
let a = signals.as_mut_slice();
|
unsafe { write(signals_ptr.add(idx), 1) };
|
||||||
a[idx] = 1;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// The closure that we want to fuzz
|
// The closure that we want to fuzz
|
||||||
@ -65,7 +65,7 @@ pub fn main() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Create an observation channel using the signals map
|
// Create an observation channel using the signals map
|
||||||
let observer = unsafe { StdMapObserver::new("signals", signals_clone.as_mut_slice()) };
|
let observer = unsafe { StdMapObserver::from_mut_ptr("signals", signals_ptr, signals_len) };
|
||||||
// Create a stacktrace observer
|
// Create a stacktrace observer
|
||||||
let bt_observer = BacktraceObserver::new(
|
let bt_observer = BacktraceObserver::new(
|
||||||
"BacktraceObserver",
|
"BacktraceObserver",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use std::path::PathBuf;
|
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
use std::ptr::write_volatile;
|
use std::ptr::write_volatile;
|
||||||
|
use std::{path::PathBuf, ptr::write};
|
||||||
|
|
||||||
use libafl::{
|
use libafl::{
|
||||||
bolts::{current_nanos, rands::StdRand, tuples::tuple_list, AsSlice},
|
bolts::{current_nanos, rands::StdRand, tuples::tuple_list, AsSlice},
|
||||||
@ -22,10 +22,11 @@ use libafl::{
|
|||||||
|
|
||||||
/// Coverage map with explicit assignments due to the lack of instrumentation
|
/// Coverage map with explicit assignments due to the lack of instrumentation
|
||||||
static mut SIGNALS: [u8; 16] = [0; 16];
|
static mut SIGNALS: [u8; 16] = [0; 16];
|
||||||
|
static mut SIGNALS_PTR: *mut u8 = unsafe { SIGNALS.as_mut_ptr() };
|
||||||
|
|
||||||
/// Assign a signal to the signals map
|
/// Assign a signal to the signals map
|
||||||
fn signals_set(idx: usize) {
|
fn signals_set(idx: usize) {
|
||||||
unsafe { SIGNALS[idx] = 1 };
|
unsafe { write(SIGNALS_PTR.add(idx), 1) };
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(clippy::similar_names)]
|
#[allow(clippy::similar_names)]
|
||||||
@ -58,7 +59,7 @@ pub fn main() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Create an observation channel using the signals map
|
// Create an observation channel using the signals map
|
||||||
let observer = unsafe { StdMapObserver::new("signals", &mut SIGNALS) };
|
let observer = unsafe { StdMapObserver::from_mut_ptr("signals", SIGNALS_PTR, SIGNALS.len()) };
|
||||||
// Create a stacktrace observer to add the observers tuple
|
// Create a stacktrace observer to add the observers tuple
|
||||||
let mut bt = None;
|
let mut bt = None;
|
||||||
let bt_observer = BacktraceObserver::new(
|
let bt_observer = BacktraceObserver::new(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user