diff --git a/nyx/auxiliary_buffer.c b/nyx/auxiliary_buffer.c index 7ba076de3e..afbe400531 100644 --- a/nyx/auxiliary_buffer.c +++ b/nyx/auxiliary_buffer.c @@ -187,7 +187,7 @@ void set_pt_overflow_auxiliary_result_buffer(auxilary_buffer_t* auxilary_buffer) VOLATILE_WRITE_8(auxilary_buffer->result.pt_overflow, 1); } -void set_exec_done_auxiliary_result_buffer(auxilary_buffer_t* auxilary_buffer, uint8_t sec, uint32_t usec, uint32_t num_dirty_pages){ +void set_exec_done_auxiliary_result_buffer(auxilary_buffer_t* auxilary_buffer, uint32_t sec, uint32_t usec, uint32_t num_dirty_pages){ VOLATILE_WRITE_8(auxilary_buffer->result.exec_done, 1); VOLATILE_WRITE_32(auxilary_buffer->result.runtime_sec, sec); diff --git a/nyx/auxiliary_buffer.h b/nyx/auxiliary_buffer.h index 0ac87ce8c2..90dda2f31c 100644 --- a/nyx/auxiliary_buffer.h +++ b/nyx/auxiliary_buffer.h @@ -155,7 +155,7 @@ void set_asan_auxiliary_result_buffer(auxilary_buffer_t* auxilary_buffer); void set_timeout_auxiliary_result_buffer(auxilary_buffer_t* auxilary_buffer); void set_reload_auxiliary_result_buffer(auxilary_buffer_t* auxilary_buffer); void set_pt_overflow_auxiliary_result_buffer(auxilary_buffer_t* auxilary_buffer); -void set_exec_done_auxiliary_result_buffer(auxilary_buffer_t* auxilary_buffer, uint8_t sec, uint32_t usec, uint32_t num_dirty_pages); +void set_exec_done_auxiliary_result_buffer(auxilary_buffer_t* auxilary_buffer, uint32_t sec, uint32_t usec, uint32_t num_dirty_pages); void set_state_auxiliary_result_buffer(auxilary_buffer_t* auxilary_buffer, uint8_t state); void set_hprintf_auxiliary_buffer(auxilary_buffer_t* auxilary_buffer, char* msg, uint32_t len); diff --git a/nyx/synchronization.c b/nyx/synchronization.c index c502f89138..8aa1ade89a 100644 --- a/nyx/synchronization.c +++ b/nyx/synchronization.c @@ -245,15 +245,26 @@ void synchronization_lock_hprintf(void){ } void synchronization_lock(void){ + timeout_detector_t timer = GET_GLOBAL_STATE()->timeout_detector; pthread_mutex_lock(&synchronization_lock_mutex); run_counter++; if(qemu_get_cpu(0)->intel_pt_run_trashed){ set_pt_overflow_auxiliary_result_buffer(GET_GLOBAL_STATE()->auxilary_buffer); } + + long runtime_sec = timer.config.tv_sec - timer.alarm.it_value.tv_sec; + long runtime_usec = timer.config.tv_usec - timer.alarm.it_value.tv_usec; + + if (runtime_usec < 0) { + if (runtime_sec < 1) { + fprintf(stderr, "Error: negative payload runtime?!\n"); + } + runtime_sec -= 1; + runtime_usec = timer.config.tv_usec - timer.alarm.it_value.tv_usec + 1000000; + } set_exec_done_auxiliary_result_buffer(GET_GLOBAL_STATE()->auxilary_buffer, - GET_GLOBAL_STATE()->timeout_detector.timeout_sec - GET_GLOBAL_STATE()->timeout_detector.arm_timeout.it_value.tv_sec, - GET_GLOBAL_STATE()->timeout_detector.timeout_usec - (uint32_t)GET_GLOBAL_STATE()->timeout_detector.arm_timeout.it_value.tv_usec, + runtime_sec, runtime_usec, GET_GLOBAL_STATE()->num_dirty_pages); /* if(last_timeout){