diff --git a/libafl/src/executors/inprocess.rs b/libafl/src/executors/inprocess.rs index a890be9518..cc9c0460b3 100644 --- a/libafl/src/executors/inprocess.rs +++ b/libafl/src/executors/inprocess.rs @@ -71,7 +71,15 @@ where #[inline] fn run_target(&mut self, input: &I) -> Result { let bytes = input.target_bytes(); + + #[cfg(unix)] + unsafe { libc::alarm(1) }; + let ret = (self.harness_fn)(self, bytes.as_slice()); + + #[cfg(unix)] + unsafe { libc::alarm(0) }; + #[cfg(unix)] unsafe { write_volatile( @@ -228,14 +236,19 @@ mod unix_signal_handler { unsafe { let data = &mut GLOBAL_STATE; match signal { - Signal::SigUser2 => (data.timeout_handler)(signal, info, void, data), - _ => (data.crash_handler)(signal, info, void, data), + Signal::SigUser2 | Signal::SigAlarm => { + (data.timeout_handler)(signal, info, void, data) + }, + _ => { + (data.crash_handler)(signal, info, void, data) + }, } } } fn signals(&self) -> Vec { vec![ + Signal::SigAlarm, Signal::SigUser2, Signal::SigAbort, Signal::SigBus,