From 807a534121be3db3a4424b3c2fe22e069f64512d Mon Sep 17 00:00:00 2001 From: Andrey Fedotov Date: Tue, 4 Apr 2023 20:17:48 +0300 Subject: [PATCH] Use observers to handle crashes in run_target for TimeoutForkserverExecutor (#1189) Co-authored-by: Dongjia "toka" Zhang --- libafl/src/executors/forkserver.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/libafl/src/executors/forkserver.rs b/libafl/src/executors/forkserver.rs index b22c24c999..ed622b1e93 100644 --- a/libafl/src/executors/forkserver.rs +++ b/libafl/src/executors/forkserver.rs @@ -31,7 +31,7 @@ use crate::{ fs::{get_unique_std_input_file, InputFile}, os::{dup2, pipes::Pipe}, shmem::{ShMem, ShMemProvider, UnixShMemProvider}, - tuples::Prepend, + tuples::{MatchName, Prepend}, AsMutSlice, AsSlice, Truncate, }, executors::{Executor, ExitKind, HasObservers}, @@ -418,7 +418,7 @@ impl TimeoutForkserverExecutor { impl Executor for TimeoutForkserverExecutor where - E: Executor + HasForkserver + Debug, + E: Executor + HasForkserver + HasObservers + Debug, E::Input: HasTargetBytes, EM: UsesState, Z: UsesState, @@ -488,6 +488,13 @@ where self.executor.forkserver_mut().set_status(status); if libc::WIFSIGNALED(self.executor.forkserver().status()) { exit_kind = ExitKind::Crash; + #[cfg(feature = "regex")] + if let Some(asan_observer) = self + .observers_mut() + .match_name_mut::("AsanBacktraceObserver") + { + asan_observer.parse_asan_output_from_asan_log_file(pid)?; + } } } else { self.executor.forkserver_mut().set_last_run_timed_out(1);