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);
|
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 ) {
|
void libafl_start_int_timer( void ) {
|
||||||
|
libafl_clear_int_timer();
|
||||||
for (int source=0; source<LIBAFL_MAX_INTERRUPT_SOURCES; source++) {
|
for (int source=0; source<LIBAFL_MAX_INTERRUPT_SOURCES; source++) {
|
||||||
if (libafl_num_interrupts[source] == 0) {continue;}
|
if (libafl_num_interrupts[source] == 0) {continue;}
|
||||||
for (int i=0; i<libafl_num_interrupts[source] && i<LIBAFL_MAX_INTERRUPTS; i++) {
|
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_offsets[source][i] == 0) {continue;}
|
||||||
if (!libafl_interrupt_timers[source][i]) {
|
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_transaction_begin(libafl_interrupt_timers[source][i]);
|
||||||
ptimer_stop(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];
|
extern volatile uint64_t libafl_num_interrupts[LIBAFL_MAX_INTERRUPT_SOURCES];
|
||||||
|
|
||||||
static void libafl_timed_int_hook(void*);
|
static void libafl_timed_int_hook(void*);
|
||||||
|
void libafl_clear_int_timer( void );
|
||||||
void libafl_start_int_timer( void );
|
void libafl_start_int_timer( void );
|
||||||
void libafl_send_irq(int irqn);
|
void libafl_send_irq(int irqn);
|
Loading…
x
Reference in New Issue
Block a user