@@ -7,12 +7,15 @@ use std::{
77 time:: Duration ,
88} ;
99
10+ #[ cfg( feature = "fuzzbench" ) ]
11+ use libafl:: events:: SimpleEventManager ;
12+ #[ cfg( not( feature = "fuzzbench" ) ) ]
13+ use libafl:: events:: { CentralizedEventManager , LlmpRestartingEventManager } ;
14+ #[ cfg( feature = "fuzzbench" ) ]
15+ use libafl:: monitors:: SimpleMonitor ;
1016use libafl:: {
1117 corpus:: { CachedOnDiskCorpus , Corpus , OnDiskCorpus } ,
12- events:: {
13- CentralizedEventManager , EventManagerHooksTuple , LlmpRestartingEventManager ,
14- ProgressReporter ,
15- } ,
18+ events:: ProgressReporter ,
1619 executors:: forkserver:: { ForkserverExecutor , ForkserverExecutorBuilder } ,
1720 feedback_and, feedback_or, feedback_or_fast,
1821 feedbacks:: {
@@ -39,6 +42,8 @@ use libafl::{
3942 } ,
4043 Error , Fuzzer , HasFeedback , HasMetadata , SerdeAny ,
4144} ;
45+ #[ cfg( not( feature = "fuzzbench" ) ) ]
46+ use libafl_bolts:: shmem:: StdShMemProvider ;
4247use libafl_bolts:: {
4348 core_affinity:: CoreId ,
4449 current_nanos, current_time,
@@ -70,23 +75,47 @@ use crate::{
7075pub type LibaflFuzzState =
7176 StdState < BytesInput , CachedOnDiskCorpus < BytesInput > , StdRand , OnDiskCorpus < BytesInput > > ;
7277
73- pub fn run_client < EMH , SP > (
74- state : Option < LibaflFuzzState > ,
75- mut restarting_mgr : CentralizedEventManager <
76- LlmpRestartingEventManager < ( ) , LibaflFuzzState , SP > ,
77- EMH ,
78- LibaflFuzzState ,
79- SP ,
80- > ,
81- fuzzer_dir : & Path ,
82- core_id : CoreId ,
83- opt : & Opt ,
84- is_main_node : bool ,
85- ) -> Result < ( ) , Error >
86- where
87- EMH : EventManagerHooksTuple < LibaflFuzzState > + Copy + Clone ,
88- SP : ShMemProvider ,
89- {
78+ #[ cfg( not( feature = "fuzzbench" ) ) ]
79+ type LibaflFuzzManager = CentralizedEventManager <
80+ LlmpRestartingEventManager < ( ) , LibaflFuzzState , StdShMemProvider > ,
81+ ( ) ,
82+ LibaflFuzzState ,
83+ StdShMemProvider ,
84+ > ;
85+ #[ cfg( feature = "fuzzbench" ) ]
86+ type LibaflFuzzManager < F > = SimpleEventManager < SimpleMonitor < F > , LibaflFuzzState > ;
87+
88+ macro_rules! define_run_client {
89+ ( $state: ident, $mgr: ident, $fuzzer_dir: ident, $core_id: ident, $opt: ident, $is_main_node: ident, $body: block) => {
90+ #[ cfg( not( feature = "fuzzbench" ) ) ]
91+ pub fn run_client(
92+ $state: Option <LibaflFuzzState >,
93+ mut $mgr: LibaflFuzzManager ,
94+ $fuzzer_dir: & Path ,
95+ $core_id: CoreId ,
96+ $opt: & Opt ,
97+ $is_main_node: bool ,
98+ ) -> Result <( ) , Error > {
99+ $body
100+ }
101+ #[ cfg( feature = "fuzzbench" ) ]
102+ pub fn run_client<F >(
103+ $state: Option <LibaflFuzzState >,
104+ mut $mgr: LibaflFuzzManager <F >,
105+ $fuzzer_dir: & Path ,
106+ $core_id: CoreId ,
107+ $opt: & Opt ,
108+ $is_main_node: bool ,
109+ ) -> Result <( ) , Error >
110+ where
111+ F : FnMut ( & str ) ,
112+ {
113+ $body
114+ }
115+ } ;
116+ }
117+
118+ define_run_client ! ( state, mgr, fuzzer_dir, core_id, opt, is_main_node, {
90119 // Create the shared memory map for comms with the forkserver
91120 let mut shmem_provider = UnixShMemProvider :: new( ) . unwrap( ) ;
92121 let mut shmem = shmem_provider
@@ -382,7 +411,7 @@ where
382411 . load_initial_inputs_multicore(
383412 & mut fuzzer,
384413 & mut executor,
385- & mut restarting_mgr ,
414+ & mut mgr ,
386415 & [ queue_dir] ,
387416 & core_id,
388417 opt. cores. as_ref( ) . expect( "invariant; should never occur" ) ,
@@ -496,7 +525,7 @@ where
496525 & mut stages,
497526 & mut executor,
498527 & mut state,
499- & mut restarting_mgr ,
528+ & mut mgr ,
500529 ) ?;
501530 } else {
502531 // The order of the stages matter!
@@ -515,12 +544,12 @@ where
515544 & mut stages,
516545 & mut executor,
517546 & mut state,
518- & mut restarting_mgr ,
547+ & mut mgr ,
519548 ) ?;
520549 }
521550 Ok ( ( ) )
522551 // TODO: serialize state when exiting.
523- }
552+ } ) ;
524553
525554fn base_forkserver_builder < ' a > (
526555 opt : & ' a Opt ,
@@ -539,7 +568,7 @@ fn base_forkserver_builder<'a>(
539568 if let Some ( target_env) = & opt. target_env {
540569 executor = executor. envs ( target_env) ;
541570 }
542- if opt. frida_mode {
571+ if opt. frida_mode || opt . unicorn_mode || opt . qemu_mode {
543572 executor = executor. kill_signal ( nix:: sys:: signal:: Signal :: SIGKILL ) ;
544573 }
545574 if let Some ( kill_signal) = opt. kill_signal {
0 commit comments