clear ptimers before each run
This commit is contained in:
parent
ff8c538b93
commit
fead70c87b
@ -325,13 +325,31 @@ static void libafl_timed_int_hook(void* arg)
|
||||
{
|
||||
libafl_send_irq((int)arg);
|
||||
}
|
||||
/* The state after snapshot reloads is unlcear, try every possible option to disable existing timers */
|
||||
void libafl_clear_int_timer( void ) {
|
||||
for (int source=0; source<LIBAFL_MAX_INTERRUPT_SOURCES; source++) {
|
||||
for (int i=0; i<LIBAFL_MAX_INTERRUPTS; i++) {
|
||||
if (libafl_interrupt_timers[source][i]) {
|
||||
// Try stopping the existing timer
|
||||
ptimer_transaction_begin(libafl_interrupt_timers[source][i]);
|
||||
ptimer_stop(libafl_interrupt_timers[source][i]);
|
||||
ptimer_transaction_commit(libafl_interrupt_timers[source][i]);
|
||||
// Try freeing the existing timer
|
||||
ptimer_free(libafl_interrupt_timers[source][i]);
|
||||
libafl_interrupt_timers[source][i] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void libafl_start_int_timer( void ) {
|
||||
libafl_clear_int_timer();
|
||||
for (int source=0; source<LIBAFL_MAX_INTERRUPT_SOURCES; source++) {
|
||||
if (libafl_num_interrupts[source] == 0) {continue;}
|
||||
for (int i=0; i<libafl_num_interrupts[source] && i<LIBAFL_MAX_INTERRUPTS; i++) {
|
||||
if (libafl_interrupt_offsets[source][i] == 0) {continue;}
|
||||
if (!libafl_interrupt_timers[source][i]) {
|
||||
libafl_interrupt_timers[source][i] = ptimer_init(&libafl_timed_int_hook, (void*)source, 0);
|
||||
libafl_interrupt_timers[source][i] = ptimer_init(&libafl_timed_int_hook, (void*)source, PTIMER_POLICY_LEGACY);
|
||||
}
|
||||
ptimer_transaction_begin(libafl_interrupt_timers[source][i]);
|
||||
ptimer_stop(libafl_interrupt_timers[source][i]);
|
||||
|
@ -5,5 +5,6 @@ extern volatile uint32_t libafl_interrupt_offsets[LIBAFL_MAX_INTERRUPT_SOURCES][
|
||||
extern volatile uint64_t libafl_num_interrupts[LIBAFL_MAX_INTERRUPT_SOURCES];
|
||||
|
||||
static void libafl_timed_int_hook(void*);
|
||||
void libafl_clear_int_timer( void );
|
||||
void libafl_start_int_timer( void );
|
||||
void libafl_send_irq(int irqn);
|
Loading…
x
Reference in New Issue
Block a user