diff --git a/afl/src/events/mod.rs b/afl/src/events/mod.rs index cd467eb98d..93dcc56511 100644 --- a/afl/src/events/mod.rs +++ b/afl/src/events/mod.rs @@ -759,6 +759,16 @@ where Self { llmp_mgr, sender } } + /// Get the sender + pub fn sender(&self) -> &LlmpSender { + &self.sender + } + + /// Get the sender (mut) + pub fn sender_mut(&mut self) -> &mut LlmpSender { + &mut self.sender + } + /* pub fn temp( stats: ST, @@ -848,7 +858,7 @@ where #[cfg(feature = "std")] pub fn setup_restarting_state( mgr: &mut LlmpEventManager, -) -> Result>, AflError> +) -> Result<(Option>, LlmpRestartingEventManager), AflError> where I: Input, C: Corpus, @@ -890,42 +900,36 @@ where // We are the fuzzing instance, first, connect to our own restore map. // A sender and a receiver for single communication - let mut receiver = LlmpReceiver::::on_existing_from_env(ENV_FUZZER_RECEIVER)?; - let mut sender = LlmpSender::::on_existing_from_env(ENV_FUZZER_SENDER)?; - - todo!("all the things"); - /* + let mut receiver = LlmpReceiver::::on_existing_from_env(ENV_FUZZER_RECEIVER)?; + let sender = LlmpSender::::on_existing_from_env(ENV_FUZZER_SENDER)?; // If we're restarting, deserialize the old state. - let (mut mgr, mut state) = match receiver.recv_buf()? { + let (state, mut mgr) = match receiver.recv_buf()? { None => { println!("First run. Let's set it all up"); // Mgr to send and receive msgs from/to all other fuzzer instances - /*let client_mgr = - LlmpEventManager::existing_client_from_env(ENV_FUZZER_BROKER_CLIENT_INITIAL)?; + let client_mgr = + LlmpEventManager::::existing_client_from_env(ENV_FUZZER_BROKER_CLIENT_INITIAL)?; - (LlmpRestartingEventManager::new(client_mgr, sender), None)*/ - todo!("Do"); + (None, LlmpRestartingEventManager::new(client_mgr, sender)) } // Restoring from a previous run, deserialize state and corpus. Some((_sender, _tag, msg)) => { println!("Subsequent run. Let's load all data from shmem (received {} bytes from previous instance)", msg.len()); - let (mgr, state) = deserialize_state_mgr(&msg)?; - todo!("Finish"); - //(LlmpRestartingEventManager::new(mgr, sender), Some(state)) + let (state, mgr): (State, LlmpEventManager) = deserialize_state_mgr(&msg)?; + + (Some(state), LlmpRestartingEventManager::new(mgr, sender)) } }; // We reset the sender, the next sender and receiver (after crash) will reuse the page from the initial message. - unsafe { sender.reset_last_page() }; + unsafe { mgr.sender_mut().reset_last_page() }; /* TODO: Not sure if this is needed // We commit an empty NO_RESTART message to this buf, against infinite loops, // in case something crashes in the fuzzer. sender.send_buf(_LLMP_TAG_NO_RESTART, []); */ - //Ok(state) - todo!("More") - */ + Ok((state, mgr)) } #[cfg(test)]