diff --git a/libafl/src/events/llmp.rs b/libafl/src/events/llmp.rs index 2a82a969aa..2d8a4e0d29 100644 --- a/libafl/src/events/llmp.rs +++ b/libafl/src/events/llmp.rs @@ -27,7 +27,7 @@ use crate::{ }, events::{ BrokerEventResult, Event, EventFirer, EventManager, EventManagerId, EventProcessor, - EventRestarter, + EventRestarter, HasEventManagerId, }, executors::{Executor, HasObservers}, fuzzer::{EvaluatorObservers, ExecutionProcessor}, @@ -499,11 +499,19 @@ where impl EventManager for LlmpEventManager where - SP: ShMemProvider, E: Executor + HasObservers, I: Input, OT: ObserversTuple, + SP: ShMemProvider, Z: ExecutionProcessor + EvaluatorObservers, //CE: CustomEvent, +{ +} + +impl HasEventManagerId for LlmpEventManager +where + I: Input, + OT: ObserversTuple, + SP: ShMemProvider, { /// Gets the id assigned to this sender. fn mgr_id(&self) -> EventManagerId { @@ -639,6 +647,18 @@ where { } +impl HasEventManagerId for LlmpRestartingEventManager +where + I: Input, + OT: ObserversTuple, + S: Serialize, + SP: ShMemProvider + 'static, +{ + fn mgr_id(&self) -> EventManagerId { + self.llmp_mgr.mgr_id() + } +} + /// The llmp connection from the actual fuzzer to the process supervising it const _ENV_FUZZER_SENDER: &str = "_AFL_ENV_FUZZER_SENDER"; const _ENV_FUZZER_RECEIVER: &str = "_AFL_ENV_FUZZER_RECEIVER"; diff --git a/libafl/src/events/mod.rs b/libafl/src/events/mod.rs index d9fc047790..925b59f752 100644 --- a/libafl/src/events/mod.rs +++ b/libafl/src/events/mod.rs @@ -253,19 +253,19 @@ pub trait EventProcessor { } } +pub trait HasEventManagerId { + /// The id of this manager. For Multiprocessed [`EventManager`]s, + /// each client sholud have a unique ids. + fn mgr_id(&self) -> EventManagerId; +} + /// [`EventManager`] is the main communications hub. /// For the "normal" multi-processed mode, you may want to look into [`RestartingEventManager`] pub trait EventManager: - EventFirer + EventProcessor + EventRestarter + EventFirer + EventProcessor + EventRestarter + HasEventManagerId where I: Input, { - /// The id of this `0` for - fn mgr_id(&self) -> EventManagerId { - EventManagerId { - ..EventManagerId::default() - } - } } /// An eventmgr for tests, and as placeholder if you really don't need an event manager. @@ -296,6 +296,12 @@ impl EventProcessor for NopEventManager { impl EventManager for NopEventManager where I: Input {} +impl HasEventManagerId for NopEventManager { + fn mgr_id(&self) -> EventManagerId { + EventManagerId { id: 0 } + } +} + #[cfg(test)] mod tests { diff --git a/libafl/src/events/simple.rs b/libafl/src/events/simple.rs index e20c31f8dd..db2d447561 100644 --- a/libafl/src/events/simple.rs +++ b/libafl/src/events/simple.rs @@ -20,7 +20,10 @@ use crate::bolts::{ }; use crate::{ bolts::llmp, - events::{BrokerEventResult, Event, EventFirer, EventManager, EventProcessor, EventRestarter}, + events::{ + BrokerEventResult, Event, EventFirer, EventManager, EventManagerId, EventProcessor, + EventRestarter, HasEventManagerId, + }, inputs::Input, stats::Stats, Error, @@ -96,6 +99,16 @@ where { } +impl HasEventManagerId for SimpleEventManager +where + I: Input, + ST: Stats, +{ + fn mgr_id(&self) -> EventManagerId { + EventManagerId { id: 0 } + } +} + impl SimpleEventManager where I: Input, @@ -272,6 +285,19 @@ where { } +#[cfg(feature = "std")] +impl HasEventManagerId for SimpleRestartingEventManager +where + I: Input, + S: Serialize, + SP: ShMemProvider, + ST: Stats, +{ + fn mgr_id(&self) -> EventManagerId { + self.simple_event_mgr.mgr_id() + } +} + #[cfg(feature = "std")] #[allow(clippy::type_complexity, clippy::too_many_lines)] impl SimpleRestartingEventManager