remove timeout on crash (#224)
This commit is contained in:
parent
42b7c6d7e7
commit
ec4c5ae88a
@ -275,6 +275,7 @@ mod unix_signal_handler {
|
|||||||
events::{Event, EventFirer, EventRestarter},
|
events::{Event, EventFirer, EventRestarter},
|
||||||
executors::{
|
executors::{
|
||||||
inprocess::{InProcessExecutorHandlerData, GLOBAL_STATE},
|
inprocess::{InProcessExecutorHandlerData, GLOBAL_STATE},
|
||||||
|
timeout::remove_timeout,
|
||||||
ExitKind,
|
ExitKind,
|
||||||
},
|
},
|
||||||
feedbacks::Feedback,
|
feedbacks::Feedback,
|
||||||
@ -422,6 +423,8 @@ mod unix_signal_handler {
|
|||||||
I: Input,
|
I: Input,
|
||||||
Z: HasObjective<I, OF, S>,
|
Z: HasObjective<I, OF, S>,
|
||||||
{
|
{
|
||||||
|
remove_timeout();
|
||||||
|
|
||||||
#[cfg(all(target_os = "android", target_arch = "aarch64"))]
|
#[cfg(all(target_os = "android", target_arch = "aarch64"))]
|
||||||
let _context = *(((_context as *mut _ as *mut c_void as usize) + 128) as *mut c_void
|
let _context = *(((_context as *mut _ as *mut c_void as usize) + 128) as *mut c_void
|
||||||
as *mut ucontext_t);
|
as *mut ucontext_t);
|
||||||
|
@ -11,7 +11,7 @@ use crate::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
use core::ptr::null_mut;
|
use core::{mem::zeroed, ptr::null_mut};
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
use libc::c_int;
|
use libc::c_int;
|
||||||
|
|
||||||
@ -37,13 +37,24 @@ extern "C" {
|
|||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
const ITIMER_REAL: c_int = 0;
|
const ITIMER_REAL: c_int = 0;
|
||||||
|
|
||||||
|
/// Reset and remove the timeout
|
||||||
|
pub fn remove_timeout() {
|
||||||
|
#[cfg(unix)]
|
||||||
|
unsafe {
|
||||||
|
let mut itimerval_zero: Itimerval = zeroed();
|
||||||
|
setitimer(ITIMER_REAL, &mut itimerval_zero, null_mut());
|
||||||
|
}
|
||||||
|
#[cfg(windows)]
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// The timeout excutor is a wrapper that sets a timeout before each run
|
/// The timeout excutor is a wrapper that sets a timeout before each run
|
||||||
pub struct TimeoutExecutor<E> {
|
pub struct TimeoutExecutor<E> {
|
||||||
executor: E,
|
executor: E,
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
itimerval: Itimerval,
|
itimerval: Itimerval,
|
||||||
#[cfg(unix)]
|
|
||||||
itimerval_zero: Itimerval,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<E> TimeoutExecutor<E> {
|
impl<E> TimeoutExecutor<E> {
|
||||||
@ -52,34 +63,21 @@ impl<E> TimeoutExecutor<E> {
|
|||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
pub fn new(executor: E, exec_tmout: Duration) -> Self {
|
pub fn new(executor: E, exec_tmout: Duration) -> Self {
|
||||||
let milli_sec = exec_tmout.as_millis();
|
let milli_sec = exec_tmout.as_millis();
|
||||||
let it_value_some = Timeval {
|
let it_value = Timeval {
|
||||||
tv_sec: (milli_sec / 1000) as i64,
|
tv_sec: (milli_sec / 1000) as i64,
|
||||||
tv_usec: (milli_sec % 1000) as i64,
|
tv_usec: (milli_sec % 1000) as i64,
|
||||||
};
|
};
|
||||||
let it_value_zero = Timeval {
|
let it_interval = Timeval {
|
||||||
tv_sec: 0,
|
|
||||||
tv_usec: 0,
|
|
||||||
};
|
|
||||||
let it_interval_some = Timeval {
|
|
||||||
tv_sec: 0,
|
|
||||||
tv_usec: 0,
|
|
||||||
};
|
|
||||||
let it_interval_zero = Timeval {
|
|
||||||
tv_sec: 0,
|
tv_sec: 0,
|
||||||
tv_usec: 0,
|
tv_usec: 0,
|
||||||
};
|
};
|
||||||
let itimerval = Itimerval {
|
let itimerval = Itimerval {
|
||||||
it_value: it_value_some,
|
it_value: it_value,
|
||||||
it_interval: it_interval_some,
|
it_interval: it_interval,
|
||||||
};
|
|
||||||
let itimerval_zero = Itimerval {
|
|
||||||
it_value: it_value_zero,
|
|
||||||
it_interval: it_interval_zero,
|
|
||||||
};
|
};
|
||||||
Self {
|
Self {
|
||||||
executor,
|
executor,
|
||||||
itimerval,
|
itimerval,
|
||||||
itimerval_zero,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,16 +114,7 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
let ret = self.executor.run_target(fuzzer, state, mgr, input);
|
let ret = self.executor.run_target(fuzzer, state, mgr, input);
|
||||||
|
remove_timeout();
|
||||||
#[cfg(unix)]
|
|
||||||
unsafe {
|
|
||||||
setitimer(ITIMER_REAL, &mut self.itimerval_zero, null_mut());
|
|
||||||
}
|
|
||||||
#[cfg(windows)]
|
|
||||||
{
|
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
ret
|
ret
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user