From 2a86c891191b02a280ed88bf1cd3d73c9168e411 Mon Sep 17 00:00:00 2001 From: Dominik Maier Date: Thu, 17 Dec 2020 15:18:27 +0100 Subject: [PATCH 1/2] no_std builds again --- afl/src/events/llmp.rs | 3 +++ afl/src/events/mod.rs | 19 ++++++++++--------- afl/src/feedbacks/mod.rs | 3 ++- afl/src/observers/mod.rs | 6 ++++-- afl/src/utils.rs | 6 ++++-- 5 files changed, 23 insertions(+), 14 deletions(-) diff --git a/afl/src/events/llmp.rs b/afl/src/events/llmp.rs index 677ced499f..c38d222a50 100644 --- a/afl/src/events/llmp.rs +++ b/afl/src/events/llmp.rs @@ -55,6 +55,8 @@ use core::{ sync::atomic::{compiler_fence, Ordering}, time::Duration, }; + +#[cfg(feature = "std")] use std::{ io::{Read, Write}, net::{TcpListener, TcpStream}, @@ -64,6 +66,7 @@ use std::{ use crate::utils::next_pow2; use crate::AflError; +#[cfg(feature = "std")] use super::shmem_translated::AflShmem; /// We'll start off with 256 megabyte maps per fuzzer client diff --git a/afl/src/events/mod.rs b/afl/src/events/mod.rs index 5601bdebce..7a6a0d4c5d 100644 --- a/afl/src/events/mod.rs +++ b/afl/src/events/mod.rs @@ -1,31 +1,29 @@ +// TODO: llmp can be no_std, if we abstract away page creation #[cfg(feature = "std")] pub mod llmp; #[cfg(feature = "std")] pub mod shmem_translated; -use alloc::string::String; +use alloc::string::{String, ToString}; +use alloc::vec::Vec; +use core::time::Duration; use core::{marker::PhantomData, time}; - +#[cfg(feature = "std")] use serde::{Deserialize, Serialize}; -//#[cfg(feature = "std")] -//pub mod shmem_translated; - #[cfg(feature = "std")] -use std::time::Duration; - +use self::llmp::Tag; use crate::corpus::Corpus; use crate::executors::Executor; use crate::feedbacks::FeedbacksTuple; use crate::inputs::Input; use crate::observers::ObserversTuple; +#[cfg(feature = "std")] use crate::serde_anymap::Ptr; use crate::utils::Rand; use crate::AflError; use crate::{engines::State, utils}; -use self::llmp::Tag; - #[derive(Debug, Copy, Clone)] /// Indicate if an event worked or not pub enum BrokerEventResult { @@ -377,6 +375,8 @@ where message, phantom: _, } => { + let (_, _) = (message, severity_level); + #[cfg(feature = "std")] println!("[LOG {}]: {}", severity_level, message); Ok(BrokerEventResult::Handled) } //_ => Ok(BrokerEventResult::Forward), @@ -725,6 +725,7 @@ where phantom: PhantomData<(C, E, OT, FT, I, R)>, } +#[cfg(feature = "std")] impl LlmpEventManager where C: Corpus, diff --git a/afl/src/feedbacks/mod.rs b/afl/src/feedbacks/mod.rs index b7f2fd4e7b..84e7f8a97f 100644 --- a/afl/src/feedbacks/mod.rs +++ b/afl/src/feedbacks/mod.rs @@ -1,3 +1,4 @@ +use alloc::string::{String, ToString}; use alloc::vec::Vec; use core::marker::PhantomData; use num::Integer; @@ -254,7 +255,7 @@ where pub fn with_history_map(name: &'static str, history_map: Vec) -> Self { Self { history_map: history_map, - name: name.into(), + name: name.to_string(), phantom: PhantomData, } } diff --git a/afl/src/observers/mod.rs b/afl/src/observers/mod.rs index adeae619c8..6520ed200c 100644 --- a/afl/src/observers/mod.rs +++ b/afl/src/observers/mod.rs @@ -1,5 +1,7 @@ extern crate num; +use alloc::string::{String, ToString}; +use alloc::vec::Vec; use serde::{Deserialize, Serialize}; use crate::serde_anymap::ArrayMut; @@ -186,7 +188,7 @@ where let initial = if map.len() > 0 { map[0] } else { T::default() }; Self { map: ArrayMut::Cptr((map.as_mut_ptr(), map.len())), - name: name.into(), + name: name.to_string(), initial, } } @@ -197,7 +199,7 @@ where let initial = if len > 0 { *map_ptr } else { T::default() }; StdMapObserver { map: ArrayMut::Cptr((map_ptr, len)), - name: name.into(), + name: name.to_string(), initial, } } diff --git a/afl/src/utils.rs b/afl/src/utils.rs index 08f188ca25..bff255e56f 100644 --- a/afl/src/utils.rs +++ b/afl/src/utils.rs @@ -84,8 +84,10 @@ pub fn current_time() -> time::Duration { /// Current time (fixed fallback for no_std) #[cfg(not(feature = "std"))] #[inline] -fn current_time() -> time::Duration { - self.start_time() +pub fn current_time() -> time::Duration { + // We may not have a rt clock available. + // TODO: Make it somehow plugin-able + time::Duration::from_millis(1) } #[cfg(feature = "std")] From 468c5f6bfa34b7e37bae68e398d37e405ab1c989 Mon Sep 17 00:00:00 2001 From: Dominik Maier Date: Thu, 17 Dec 2020 15:20:29 +0100 Subject: [PATCH 2/2] code fmt, merge --- fuzzers/libfuzzer/src/lib.rs | 2 +- fuzzers/qemufuzzer/src/lib.rs | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/fuzzers/libfuzzer/src/lib.rs b/fuzzers/libfuzzer/src/lib.rs index eee459df65..38a985038e 100644 --- a/fuzzers/libfuzzer/src/lib.rs +++ b/fuzzers/libfuzzer/src/lib.rs @@ -7,7 +7,7 @@ use afl::engines::Engine; use afl::engines::Fuzzer; use afl::engines::State; use afl::engines::StdFuzzer; -use afl::events::{SimpleStats, LlmpEventManager}; +use afl::events::{LlmpEventManager, SimpleStats}; use afl::executors::inmemory::InMemoryExecutor; use afl::executors::{Executor, ExitKind}; use afl::feedbacks::MaxMapFeedback; diff --git a/fuzzers/qemufuzzer/src/lib.rs b/fuzzers/qemufuzzer/src/lib.rs index 38f83b434a..6e555624ad 100644 --- a/fuzzers/qemufuzzer/src/lib.rs +++ b/fuzzers/qemufuzzer/src/lib.rs @@ -7,7 +7,7 @@ use afl::engines::Engine; use afl::engines::Fuzzer; use afl::engines::State; use afl::engines::StdFuzzer; -use afl::events::{SimpleStats, LlmpEventManager}; +use afl::events::{LlmpEventManager, SimpleStats}; use afl::executors::inmemory::InMemoryExecutor; use afl::executors::{Executor, ExitKind}; use afl::feedbacks::MaxMapFeedback; @@ -66,7 +66,11 @@ pub extern "C" fn fuzz_main_loop() { } println!("We're a client, let's fuzz :)"); - let edges_observer = StdMapObserver::new_from_ptr(&NAME_COV_MAP, unsafe { fuzz_hitcounts_map.as_mut_ptr() }, unsafe { fuzz_edges_id }); + let edges_observer = StdMapObserver::new_from_ptr( + &NAME_COV_MAP, + unsafe { fuzz_hitcounts_map.as_mut_ptr() }, + unsafe { fuzz_edges_id }, + ); let edges_feedback = MaxMapFeedback::new_with_observer(&NAME_COV_MAP, &edges_observer); let executor = InMemoryExecutor::new("QEMUFuzzer", harness, tuple_list!(edges_observer));