From 4ae8c9b6090ea177c96c1b051cff51a09517b00d Mon Sep 17 00:00:00 2001 From: toseven Date: Tue, 18 Jul 2023 16:41:05 +0800 Subject: [PATCH] Add the feature that AFLStats is computed and reported in AFLStatsStage --- libafl/src/events/centralized.rs | 4 +- libafl/src/events/llmp.rs | 10 +- libafl/src/events/mod.rs | 81 ++-------------- libafl/src/events/simple.rs | 9 +- libafl/src/events/tcp.rs | 8 +- libafl/src/fuzzer/mod.rs | 7 +- libafl/src/schedulers/minimizer.rs | 1 + libafl/src/stages/calibrate.rs | 36 +------ libafl/src/stages/mod.rs | 4 +- libafl/src/stages/push/mod.rs | 3 +- libafl/src/stages/push/mutational.rs | 6 +- libafl/src/stages/stats.rs | 137 ++++++++++++++++++++++++--- libafl/src/state/mod.rs | 43 --------- libafl_qemu/src/executor.rs | 4 +- 14 files changed, 160 insertions(+), 193 deletions(-) diff --git a/libafl/src/events/centralized.rs b/libafl/src/events/centralized.rs index c68709fada..b5e20b8d17 100644 --- a/libafl/src/events/centralized.rs +++ b/libafl/src/events/centralized.rs @@ -324,7 +324,7 @@ where impl EventManager for CentralizedEventManager where EM: EventStatsCollector + EventManager, - EM::State: HasClientPerfMonitor + HasExecutions + HasMetadata + HasLastReportTime + HaF, + EM::State: HasClientPerfMonitor + HasExecutions + HasMetadata + HasLastReportTime, SP: ShMemProvider, E: HasObservers + Executor, for<'a> E::Observers: Deserialize<'a>, @@ -352,7 +352,7 @@ where impl ProgressReporter for CentralizedEventManager where EM: EventStatsCollector + ProgressReporter + HasEventManagerId, - EM::State: HasClientPerfMonitor + HasMetadata + HasExecutions + HasLastReportTime + HasAFLStats, + EM::State: HasClientPerfMonitor + HasMetadata + HasExecutions + HasLastReportTime, SP: ShMemProvider, { } diff --git a/libafl/src/events/llmp.rs b/libafl/src/events/llmp.rs index 5e2ef9e87f..cac6d63c3d 100644 --- a/libafl/src/events/llmp.rs +++ b/libafl/src/events/llmp.rs @@ -52,7 +52,7 @@ use crate::{ inputs::{Input, InputConverter, UsesInput}, monitors::Monitor, observers::ObserversTuple, - state::{HasClientPerfMonitor, HasExecutions, HasLastReportTime, HasMetadata, UsesState,HasAFLStats}, + state::{HasClientPerfMonitor, HasExecutions, HasLastReportTime, HasMetadata, UsesState}, Error, }; @@ -788,7 +788,7 @@ impl EventManager for LlmpEventManager where E: HasObservers + Executor, for<'a> E::Observers: Deserialize<'a>, - S: UsesInput + HasExecutions + HasClientPerfMonitor + HasMetadata + HasLastReportTime + HasAFLStats, + S: UsesInput + HasExecutions + HasClientPerfMonitor + HasMetadata + HasLastReportTime, SP: ShMemProvider, Z: EvaluatorObservers + ExecutionProcessor, { @@ -809,7 +809,7 @@ where impl ProgressReporter for LlmpEventManager where - S: UsesInput + HasExecutions + HasClientPerfMonitor + HasMetadata + HasLastReportTime+ HasAFLStats, + S: UsesInput + HasExecutions + HasClientPerfMonitor + HasMetadata + HasLastReportTime, SP: ShMemProvider, { } @@ -900,8 +900,7 @@ where + HasClientPerfMonitor + HasMetadata + HasLastReportTime - + Serialize - + HasAFLStats, + + Serialize, SP: ShMemProvider, { } @@ -990,7 +989,6 @@ where + HasClientPerfMonitor + HasMetadata + HasLastReportTime - + HasAFLStats + Serialize, SP: ShMemProvider + 'static, Z: EvaluatorObservers + ExecutionProcessor, //CE: CustomEvent, diff --git a/libafl/src/events/mod.rs b/libafl/src/events/mod.rs index 396ccba660..dd74b482ae 100644 --- a/libafl/src/events/mod.rs +++ b/libafl/src/events/mod.rs @@ -8,11 +8,7 @@ pub use centralized::*; pub mod llmp; #[cfg(feature = "tcp_manager")] pub mod tcp; -use alloc::{ - boxed::Box, - string::{String, ToString}, - vec::Vec, -}; +use alloc::{boxed::Box, string::String, vec::Vec}; #[cfg(all(unix, feature = "std"))] use core::ffi::c_void; use core::{ @@ -38,7 +34,7 @@ use crate::{ inputs::Input, monitors::UserStats, observers::ObserversTuple, - state::{HasClientPerfMonitor, HasExecutions, HasLastReportTime, HasMetadata,HasAFLStats}, + state::{HasClientPerfMonitor, HasExecutions, HasLastReportTime, HasMetadata}, Error, }; @@ -455,7 +451,7 @@ pub trait EventFirer: UsesState { /// [`ProgressReporter`] report progress to the broker. pub trait ProgressReporter: EventFirer where - Self::State: HasClientPerfMonitor + HasMetadata + HasExecutions + HasLastReportTime + HasAFLStats, + Self::State: HasClientPerfMonitor + HasMetadata + HasExecutions + HasLastReportTime, { /// Given the last time, if `monitor_timeout` seconds passed, send off an info/monitor/heartbeat message to the broker. /// Returns the new `last` time (so the old one, unless `monitor_timeout` time has passed and monitor have been sent) @@ -464,7 +460,7 @@ where &mut self, state: &mut Self::State, monitor_timeout: Duration, - ) -> Result { + ) -> Result<(), Error> { let Some(last_report_time) = state.last_report_time() else { // this is the first time we execute, no need to report progress just yet. *state.last_report_time_mut() = Some(current_time()); @@ -485,13 +481,6 @@ where let executions = *state.executions(); let cur = current_time(); - let executions = *state.executions(); - let pending_size = *state.pending(); - let pend_favored_size = *state.pend_favored(); - let own_finds_size = *state.own_finds(); - let imported_size = *state.imported(); - - // Default no introspection implmentation #[cfg(not(feature = "introspection"))] self.fire( @@ -521,62 +510,6 @@ where phantom: PhantomData, }, )?; - - self.fire( - state, - Event::UpdateUserStats { - name: "pending".to_string(), - value: UserStats::Number(pending_size as u64), - phantom: PhantomData, - }, - )?; - - self.fire( - state, - Event::UpdateUserStats { - name: "pend_fav".to_string(), - value: UserStats::Number(pend_favored_size as u64), - phantom: PhantomData, - }, - )?; - - self.fire( - state, - Event::UpdateUserStats { - name: "own_finds".to_string(), - value: UserStats::Number(own_finds_size as u64), - phantom: PhantomData, - }, - )?; - - self.fire( - state, - Event::UpdateUserStats { - name: "imported".to_string(), - value: UserStats::Number(imported_size as u64), - phantom: PhantomData, - }, - )?; - - // If performance monitor are requested, fire the `UpdatePerfMonitor` event - #[cfg(feature = "introspection")] - { - state - .introspection_monitor_mut() - .set_current_time(crate::bolts::cpu::read_time_counter()); - - // Send the current monitor over to the manager. This `.clone` shouldn't be - // costly as `ClientPerfMonitor` impls `Copy` since it only contains `u64`s - self.fire( - state, - Event::UpdatePerfMonitor { - executions, - time: cur, - introspection_monitor: Box::new(state.introspection_monitor().clone()), - phantom: PhantomData, - }, - )?; - } } *state.last_report_time_mut() = Some(cur); @@ -629,7 +562,7 @@ pub trait HasEventManagerId { pub trait EventManager: EventFirer + EventProcessor + EventRestarter + HasEventManagerId + ProgressReporter where - Self::State: HasClientPerfMonitor + HasMetadata + HasExecutions + HasLastReportTime + HasAFLStats, + Self::State: HasClientPerfMonitor + HasMetadata + HasExecutions + HasLastReportTime, { } @@ -696,7 +629,7 @@ where } impl EventManager for NopEventManager where - S: UsesInput + HasClientPerfMonitor + HasExecutions + HasLastReportTime + HasMetadata + HasAFLStats, + S: UsesInput + HasClientPerfMonitor + HasExecutions + HasLastReportTime + HasMetadata { } @@ -714,7 +647,7 @@ where } impl ProgressReporter for NopEventManager where - S: UsesInput + HasClientPerfMonitor + HasExecutions + HasLastReportTime + HasMetadata + HasAFLStats + S: UsesInput + HasClientPerfMonitor + HasExecutions + HasLastReportTime + HasMetadata { } diff --git a/libafl/src/events/simple.rs b/libafl/src/events/simple.rs index eb6518960b..07401c28d0 100644 --- a/libafl/src/events/simple.rs +++ b/libafl/src/events/simple.rs @@ -33,7 +33,7 @@ use crate::{ }, inputs::UsesInput, monitors::Monitor, - state::{HasClientPerfMonitor, HasExecutions, HasLastReportTime, HasMetadata, UsesState,HasAFLStats}, + state::{HasClientPerfMonitor, HasExecutions, HasLastReportTime, HasMetadata, UsesState}, Error, }; #[cfg(feature = "std")] @@ -132,7 +132,7 @@ where impl EventManager for SimpleEventManager where MT: Monitor, - S: UsesInput + HasClientPerfMonitor + HasExecutions + HasLastReportTime + HasMetadata + HasAFLStats, + S: UsesInput + HasClientPerfMonitor + HasExecutions + HasLastReportTime + HasMetadata, { } @@ -155,7 +155,7 @@ where impl ProgressReporter for SimpleEventManager where MT: Monitor, - S: UsesInput + HasExecutions + HasClientPerfMonitor + HasMetadata + HasLastReportTime + HasAFLStats, + S: UsesInput + HasExecutions + HasClientPerfMonitor + HasMetadata + HasLastReportTime, { } @@ -384,7 +384,6 @@ where + HasClientPerfMonitor + HasMetadata + HasLastReportTime - + HasAFLStats + Serialize, SP: ShMemProvider, { @@ -409,7 +408,7 @@ where impl ProgressReporter for SimpleRestartingEventManager where MT: Monitor, - S: UsesInput + HasExecutions + HasClientPerfMonitor + HasMetadata + HasLastReportTime + HasAFLStats, + S: UsesInput + HasExecutions + HasClientPerfMonitor + HasMetadata + HasLastReportTime, SP: ShMemProvider, { } diff --git a/libafl/src/events/tcp.rs b/libafl/src/events/tcp.rs index ccaed10bf9..8c45cc8ab8 100644 --- a/libafl/src/events/tcp.rs +++ b/libafl/src/events/tcp.rs @@ -47,7 +47,7 @@ use crate::{ fuzzer::{EvaluatorObservers, ExecutionProcessor}, inputs::{Input, UsesInput}, monitors::Monitor, - state::{HasClientPerfMonitor, HasExecutions, HasLastReportTime, HasMetadata, UsesState,HasAFLStats}, + state::{HasClientPerfMonitor, HasExecutions, HasLastReportTime, HasMetadata, UsesState}, Error, }; @@ -622,7 +622,7 @@ impl EventManager for TcpEventManager where E: HasObservers + Executor, for<'a> E::Observers: Deserialize<'a>, - S: UsesInput + HasExecutions + HasClientPerfMonitor + HasMetadata + HasLastReportTime + HasAFLStats, + S: UsesInput + HasExecutions + HasClientPerfMonitor + HasMetadata + HasLastReportTime, Z: EvaluatorObservers + ExecutionProcessor, { } @@ -640,7 +640,7 @@ where } impl ProgressReporter for TcpEventManager where - S: UsesInput + HasExecutions + HasClientPerfMonitor + HasMetadata + HasLastReportTime + HasAFLStats + S: UsesInput + HasExecutions + HasClientPerfMonitor + HasMetadata + HasLastReportTime { } @@ -688,7 +688,6 @@ where + HasClientPerfMonitor + HasMetadata + HasLastReportTime - + HasAFLStats + Serialize, SP: ShMemProvider, { @@ -769,7 +768,6 @@ where + HasClientPerfMonitor + HasMetadata + HasLastReportTime - + HasAFLStats + Serialize, SP: ShMemProvider + 'static, Z: EvaluatorObservers + ExecutionProcessor, //CE: CustomEvent, diff --git a/libafl/src/fuzzer/mod.rs b/libafl/src/fuzzer/mod.rs index 9f5d2bf688..93e489aa09 100644 --- a/libafl/src/fuzzer/mod.rs +++ b/libafl/src/fuzzer/mod.rs @@ -24,8 +24,8 @@ use crate::{ stages::StagesTuple, start_timer, state::{ - HasClientPerfMonitor, HasCorpus, HasExecutions, HasLastReportTime, HasMetadata, - HasSolutions, UsesState,HasAFLStats, + HasAFLStats, HasClientPerfMonitor, HasCorpus, HasExecutions, HasLastReportTime, + HasMetadata, HasSolutions, UsesState, }, Error, }; @@ -158,7 +158,8 @@ where /// The main fuzzer trait. pub trait Fuzzer: Sized + UsesState where - Self::State: HasClientPerfMonitor + HasMetadata + HasExecutions + HasLastReportTime + HasAFLStats, + Self::State: + HasClientPerfMonitor + HasMetadata + HasExecutions + HasLastReportTime + HasAFLStats, E: UsesState, EM: ProgressReporter, ST: StagesTuple, diff --git a/libafl/src/schedulers/minimizer.rs b/libafl/src/schedulers/minimizer.rs index 44eb4bf9a6..8849e84cc0 100644 --- a/libafl/src/schedulers/minimizer.rs +++ b/libafl/src/schedulers/minimizer.rs @@ -192,6 +192,7 @@ where /// Add an entry to the corpus and return its index fn on_add(&mut self, state: &mut CS::State, idx: CorpusId) -> Result<(), Error> { self.base.on_add(state, idx)?; + *state.pending_mut() += 1; self.update_score(state, idx) } diff --git a/libafl/src/stages/calibrate.rs b/libafl/src/stages/calibrate.rs index d2318b1ea6..84b863fbba 100644 --- a/libafl/src/stages/calibrate.rs +++ b/libafl/src/stages/calibrate.rs @@ -20,11 +20,9 @@ use crate::{ inputs::UsesInput, monitors::UserStats, observers::{MapObserver, ObserversTuple, UsesObserver}, - schedulers::{minimizer::IsFavoredMetadata, powersched::SchedulerMetadata}, + schedulers::powersched::SchedulerMetadata, stages::Stage, - state::{ - HasAFLStats, HasClientPerfMonitor, HasCorpus, HasMetadata, HasNamedMetadata, UsesState, - }, + state::{HasClientPerfMonitor, HasCorpus, HasMetadata, HasNamedMetadata, UsesState}, Error, }; @@ -88,7 +86,7 @@ where O: MapObserver, for<'de> ::Entry: Serialize + Deserialize<'de> + 'static, OT: ObserversTuple, - E::State: HasCorpus + HasMetadata + HasClientPerfMonitor + HasNamedMetadata + HasAFLStats, + E::State: HasCorpus + HasMetadata + HasClientPerfMonitor + HasNamedMetadata, Z: Evaluator, { #[inline] @@ -105,42 +103,16 @@ where mgr: &mut EM, corpus_idx: CorpusId, ) -> Result<(), Error> { - let mut has_calibration = false; - let mut is_favored = false; // Run this stage only once for each corpus entry and only if we haven't already inspected it { let corpus = state.corpus().get(corpus_idx)?.borrow(); // println!("calibration; corpus.scheduled_count() : {}", corpus.scheduled_count()); if corpus.scheduled_count() > 0 { - has_calibration = true; - } - if corpus.has_metadata::() { - is_favored = true; + return Ok(()); } } - // The number of pending testcases decrease if this testcase has been calibrated - if has_calibration { - let pending_size = state.pending_mut(); - if *pending_size > 0 { - *pending_size -= 1; - } - return Ok(()); - } - - // The number of "pend_favored" testcases decrease if this testcase is favored and is firstly calibrated. - if is_favored { - let pend_favored_size = state.pend_favored_mut(); - if *pend_favored_size > 0 { - *state.pend_favored_mut() -= 1; - } - } - - *state.pending_mut() += 1; - - *state.own_finds_mut() = state.corpus().count() - state.imported(); - let mut iter = self.stage_max; let input = state.corpus().cloned_input_for_id(corpus_idx)?; diff --git a/libafl/src/stages/mod.rs b/libafl/src/stages/mod.rs index d1aa11eed8..50560568f2 100644 --- a/libafl/src/stages/mod.rs +++ b/libafl/src/stages/mod.rs @@ -70,8 +70,8 @@ use crate::{ observers::ObserversTuple, schedulers::Scheduler, state::{ - HasClientPerfMonitor, HasCorpus, HasExecutions, HasLastReportTime, HasMetadata, HasRand, - UsesState, HasAFLStats, + HasAFLStats, HasClientPerfMonitor, HasCorpus, HasExecutions, HasLastReportTime, + HasMetadata, HasRand, UsesState, }, Error, EvaluatorObservers, ExecutesInput, ExecutionProcessor, HasScheduler, }; diff --git a/libafl/src/stages/push/mod.rs b/libafl/src/stages/push/mod.rs index da32de0d41..0b139bb52c 100644 --- a/libafl/src/stages/push/mod.rs +++ b/libafl/src/stages/push/mod.rs @@ -23,7 +23,7 @@ use crate::{ observers::ObserversTuple, schedulers::Scheduler, state::{ - HasClientPerfMonitor, HasCorpus, HasExecutions, HasLastReportTime, HasMetadata, HasRand HasAFLStats, + HasClientPerfMonitor, HasCorpus, HasExecutions, HasLastReportTime, HasMetadata, HasRand, }, Error, EvaluatorObservers, ExecutionProcessor, HasScheduler, }; @@ -187,7 +187,6 @@ where + HasExecutions + HasMetadata + HasCorpus - + HasAFLStats + HasLastReportTime, EM: EventFirer + EventRestarter + HasEventManagerId + ProgressReporter, OT: ObserversTuple, diff --git a/libafl/src/stages/push/mutational.rs b/libafl/src/stages/push/mutational.rs index b8583fd6e5..d8a50603f3 100644 --- a/libafl/src/stages/push/mutational.rs +++ b/libafl/src/stages/push/mutational.rs @@ -22,7 +22,7 @@ use crate::{ schedulers::Scheduler, start_timer, state::{ - HasClientPerfMonitor, HasCorpus, HasExecutions, HasLastReportTime, HasMetadata, HasRand, HasAFLStats, + HasClientPerfMonitor, HasCorpus, HasExecutions, HasLastReportTime, HasMetadata, HasRand, }, Error, EvaluatorObservers, ExecutionProcessor, HasScheduler, }; @@ -67,7 +67,7 @@ where EM: EventFirer + EventRestarter + HasEventManagerId, M: Mutator, OT: ObserversTuple, - CS::State: HasClientPerfMonitor + HasCorpus + HasRand + Clone + Debug + HasAFLStats, + CS::State: HasClientPerfMonitor + HasCorpus + HasRand + Clone + Debug, Z: ExecutionProcessor + EvaluatorObservers + HasScheduler, @@ -96,7 +96,6 @@ where + HasExecutions + HasLastReportTime + HasMetadata - + HasAFLStats + Clone + Debug, Z: ExecutionProcessor @@ -218,7 +217,6 @@ where + HasMetadata + HasLastReportTime + Clone - + HasAFLStats + Debug, Z: ExecutionProcessor + EvaluatorObservers diff --git a/libafl/src/stages/stats.rs b/libafl/src/stages/stats.rs index 4cf6702fab..d04ecb2d5f 100644 --- a/libafl/src/stages/stats.rs +++ b/libafl/src/stages/stats.rs @@ -1,45 +1,52 @@ //! Stage to compute/report AFL stats +use alloc::string::ToString; use core::{marker::PhantomData, time::Duration}; use crate::{ - corpus::CorpusId, + bolts::current_time, + corpus::{Corpus, CorpusId}, + events::{Event, EventFirer}, + monitors::UserStats, + schedulers::minimizer::IsFavoredMetadata, stages::Stage, - state::UsesState, + state::{HasAFLStats, HasCorpus, HasMetadata, UsesState}, Error, }; -const STATS_REPORT_INTERVAL: Duration = Duration::from_secs(15); // change this as you want. - +/// The [`AFLStatsStage`] is a simple stage that computes and reports some stats. +#[derive(Debug, Clone)] pub struct AFLStatsStage where E: UsesState, - EM: UsesState, + EM: EventFirer, Z: UsesState, { - pending: usize, - pending_favored: usize, - imported: usize, - own_finds: usize, + // the last time that we report all stats + last_report_time: Duration, + // the interval that we report all stats + stats_report_interval: Duration, + phantom: PhantomData<(E, EM, Z)>, } - impl UsesState for AFLStatsStage where E: UsesState, - EM: UsesState, + EM: EventFirer, Z: UsesState, { type State = E::State; } -impl Stage for AFLStatsStage +impl Stage for AFLStatsStage where E: UsesState, - EM: UsesState, + EM: EventFirer, Z: UsesState, + E::State: HasAFLStats + HasCorpus + HasMetadata, { + #[allow(unused_variables)] fn perform( &mut self, fuzzer: &mut Z, @@ -51,6 +58,110 @@ where // Report your stats every `STATS_REPORT_INTERVAL` // compute pending, pending_favored, imported, own_finds + let mut is_scheduled = false; + let mut is_favored = false; + { + let testcase = state.corpus().get(corpus_idx)?.borrow(); + if testcase.scheduled_count() == 0 { + is_scheduled = true; + if testcase.has_metadata::() { + is_favored = true; + } + } + } + + if is_scheduled { + let pending_size = state.pending_mut(); + if *pending_size > 0 { + *pending_size -= 1; + } + } + + if is_favored { + let pend_favored_size = state.pend_favored_mut(); + if *pend_favored_size > 0 { + *state.pend_favored_mut() -= 1; + } + } + + *state.own_finds_mut() = state.corpus().count() - state.imported(); + + let cur = current_time(); + + if cur.checked_sub(self.last_report_time).unwrap_or_default() > self.stats_report_interval { + manager.fire( + state, + Event::UpdateUserStats { + name: "pending".to_string(), + value: UserStats::Number(*state.pending() as u64), + phantom: PhantomData, + }, + )?; + + manager.fire( + state, + Event::UpdateUserStats { + name: "pend_fav".to_string(), + value: UserStats::Number(*state.pend_favored() as u64), + phantom: PhantomData, + }, + )?; + + manager.fire( + state, + Event::UpdateUserStats { + name: "own_finds".to_string(), + value: UserStats::Number(*state.own_finds() as u64), + phantom: PhantomData, + }, + )?; + + manager.fire( + state, + Event::UpdateUserStats { + name: "imported".to_string(), + value: UserStats::Number(*state.imported() as u64), + phantom: PhantomData, + }, + )?; + } + self.last_report_time = cur; + Ok(()) } } + +impl AFLStatsStage +where + E: UsesState, + EM: EventFirer, + Z: UsesState, + E::State: HasAFLStats + HasCorpus + HasMetadata, +{ + /// create a new instance of the [`AFLStatsStage`] + #[must_use] + pub fn new(interval: Duration) -> Self { + Self { + stats_report_interval: interval, + ..Default::default() + } + } +} + +impl Default for AFLStatsStage +where + E: UsesState, + EM: EventFirer, + Z: UsesState, + E::State: HasAFLStats + HasCorpus + HasMetadata, +{ + /// the default instance of the [`AFLStatsStage`] + #[must_use] + fn default() -> Self { + Self { + last_report_time: current_time(), + stats_report_interval: Duration::from_secs(15), + phantom: PhantomData, + } + } +} diff --git a/libafl/src/state/mod.rs b/libafl/src/state/mod.rs index 129cacb7b8..e31f02119c 100644 --- a/libafl/src/state/mod.rs +++ b/libafl/src/state/mod.rs @@ -968,49 +968,6 @@ impl HasLastReportTime for NopState { } } -#[cfg(test)] -impl HasAFLStats for NopState { - /// Return the number of testcases that have not gone through any fuzzing yet - fn pending(&self) -> &usize { - unimplemented!() - } - - /// Return the number of testcases that have not gone through any fuzzing yet (mutable) - fn pending_mut(&mut self) -> &mut usize { - unimplemented!() - } - - /// Return the number of `favored` testcases that have not gone through any fuzzing yet - fn pend_favored(&self) -> &usize { - unimplemented!() - } - - /// Return the number of `favored` testcases that have not gone through any fuzzing yet (mutable) - fn pend_favored_mut(&mut self) -> &mut usize { - unimplemented!() - } - - /// Return the number of new paths found during this fuzzing section - fn own_finds(&self) -> &usize { - unimplemented!() - } - - /// Return the number of new paths found during this fuzzing section (mutable) - fn own_finds_mut(&mut self) -> &mut usize { - unimplemented!() - } - - /// Return the number of new paths that imported from other fuzzers - fn imported(&self) -> &usize { - unimplemented!() - } - - /// Return the number of new paths that imported from other fuzzers - fn imported_mut(&mut self) -> &mut usize { - unimplemented!() - } -} - #[cfg(test)] impl HasMetadata for NopState { fn metadata_map(&self) -> &SerdeAnyMap { diff --git a/libafl_qemu/src/executor.rs b/libafl_qemu/src/executor.rs index 639661475b..84b0a1b01b 100644 --- a/libafl_qemu/src/executor.rs +++ b/libafl_qemu/src/executor.rs @@ -15,7 +15,7 @@ use libafl::{ observers::{ObserversTuple, UsesObservers}, state::{ HasClientPerfMonitor, HasCorpus, HasExecutions, HasLastReportTime, HasSolutions, State, - UsesState,HasAFLStats, + UsesState, }, Error, }; @@ -272,7 +272,7 @@ impl<'a, EM, H, OT, QT, S, Z, SP> Executor for QemuForkExecutor<'a, H, OT where EM: EventManager, Z, State = S>, H: FnMut(&S::Input) -> ExitKind, - S: UsesInput + HasClientPerfMonitor + HasMetadata + HasExecutions + HasLastReportTime + HasAFLStats, + S: UsesInput + HasClientPerfMonitor + HasMetadata + HasExecutions + HasLastReportTime, OT: ObserversTuple, QT: QemuHelperTuple, SP: ShMemProvider,