diff --git a/nyx/hypercall/hypercall.c b/nyx/hypercall/hypercall.c index 7ee3025999..66ab75f929 100644 --- a/nyx/hypercall/hypercall.c +++ b/nyx/hypercall/hypercall.c @@ -119,7 +119,6 @@ bool handle_hypercall_kafl_next_payload(struct kvm_run *run, pt_enable_ip_filtering(cpu, i, true, false); } } - pt_init_decoder(cpu); } request_fast_vm_reload(GET_GLOBAL_STATE()->reload_state, REQUEST_LOAD_SNAPSHOT_ROOT); diff --git a/nyx/nested_hypercalls.c b/nyx/nested_hypercalls.c index 512e301237..771e8dc35f 100644 --- a/nyx/nested_hypercalls.c +++ b/nyx/nested_hypercalls.c @@ -167,7 +167,6 @@ void handle_hypercall_kafl_nested_acquire(struct kvm_run *run, pt_enable_ip_filtering(cpu, i, true, false); } } - pt_init_decoder(cpu); qemu_mutex_lock_iothread(); diff --git a/nyx/pt.c b/nyx/pt.c index 33035ec671..d61bd87883 100644 --- a/nyx/pt.c +++ b/nyx/pt.c @@ -21,7 +21,6 @@ along with QEMU-PT. If not, see . #include "qemu/osdep.h" -#include #include #include #include @@ -92,37 +91,11 @@ static inline int pt_ioctl(int fd, unsigned long request, unsigned long arg) void pt_dump(CPUState *cpu, int bytes) { - if (!(GET_GLOBAL_STATE()->redqueen_state && - GET_GLOBAL_STATE()->redqueen_state->intercept_mode)) + nyx_debug("Dumping file..."); + if (GET_GLOBAL_STATE()->in_fuzzing_mode && !GET_GLOBAL_STATE()->dump_page) { - if (GET_GLOBAL_STATE()->in_fuzzing_mode && - GET_GLOBAL_STATE()->decoder_page_fault == false && - GET_GLOBAL_STATE()->decoder && !GET_GLOBAL_STATE()->dump_page) - { - GET_GLOBAL_STATE()->pt_trace_size += bytes; - pt_write_pt_dump_file(cpu->pt_mmap, bytes); - decoder_result_t result = - libxdc_decode(GET_GLOBAL_STATE()->decoder, cpu->pt_mmap, bytes); - switch (result) { - case decoder_success: - break; - case decoder_success_pt_overflow: - cpu->intel_pt_run_trashed = true; - break; - case decoder_page_fault: - // nyx_warn("Page not found => 0x%lx\n", libxdc_get_page_fault_addr(GET_GLOBAL_STATE()->decoder)); - GET_GLOBAL_STATE()->decoder_page_fault = true; - GET_GLOBAL_STATE()->decoder_page_fault_addr = - libxdc_get_page_fault_addr(GET_GLOBAL_STATE()->decoder); - break; - case decoder_unkown_packet: - nyx_warn("libxdc_decode returned unknown_packet\n"); - break; - case decoder_error: - nyx_warn("libxdc_decode returned decoder_error\n"); - break; - } - } + GET_GLOBAL_STATE()->pt_trace_size += bytes; + pt_write_pt_dump_file(cpu->pt_mmap, bytes); } } @@ -210,51 +183,6 @@ int pt_enable_ip_filtering(CPUState *cpu, uint8_t addrn, bool redqueen, bool hmp return r; } -void pt_init_decoder(CPUState *cpu) -{ - uint64_t filters[4][2] = { 0 }; - - /* TODO time to clean up this code -.- */ - filters[0][0] = GET_GLOBAL_STATE()->pt_ip_filter_a[0]; - filters[0][1] = GET_GLOBAL_STATE()->pt_ip_filter_b[0]; - filters[1][0] = GET_GLOBAL_STATE()->pt_ip_filter_a[1]; - filters[1][1] = GET_GLOBAL_STATE()->pt_ip_filter_b[1]; - filters[2][0] = GET_GLOBAL_STATE()->pt_ip_filter_a[2]; - filters[2][1] = GET_GLOBAL_STATE()->pt_ip_filter_b[2]; - filters[3][0] = GET_GLOBAL_STATE()->pt_ip_filter_a[3]; - filters[3][1] = GET_GLOBAL_STATE()->pt_ip_filter_b[3]; - - assert(GET_GLOBAL_STATE()->decoder == NULL); - assert(GET_GLOBAL_STATE()->shared_bitmap_ptr != NULL); - assert(GET_GLOBAL_STATE()->shared_bitmap_size != 0); - - - if (GET_GLOBAL_STATE()->pt_ip_filter_configured[0] == false && - GET_GLOBAL_STATE()->pt_ip_filter_configured[1] == false && - GET_GLOBAL_STATE()->pt_ip_filter_configured[2] == false && - GET_GLOBAL_STATE()->pt_ip_filter_configured[3] == false) { - nyx_abort("Intel PT mode cannot be enabled without any IP filters configured...\n"); - } - - GET_GLOBAL_STATE()->decoder = - libxdc_init(filters, (void *(*)(void *, uint64_t, bool *))page_cache_fetch2, - GET_GLOBAL_STATE()->page_cache, - GET_GLOBAL_STATE()->shared_bitmap_ptr, - GET_GLOBAL_STATE()->shared_bitmap_size); - - if (GET_GLOBAL_STATE()->decoder == (void*)-1) { - nyx_abort("libxdc_init() has failed ...\n"); - } - - libxdc_register_bb_callback(GET_GLOBAL_STATE()->decoder, - (void (*)(void *, disassembler_mode_t, uint64_t, - uint64_t))redqueen_callback, - GET_GLOBAL_STATE()->redqueen_state); - - alt_bitmap_init(GET_GLOBAL_STATE()->shared_bitmap_ptr, - GET_GLOBAL_STATE()->shared_bitmap_size); -} - int pt_disable_ip_filtering(CPUState *cpu, uint8_t addrn, bool hmp_mode) { int r = 0; diff --git a/nyx/pt.h b/nyx/pt.h index b69acfec42..b78a484b87 100644 --- a/nyx/pt.h +++ b/nyx/pt.h @@ -22,8 +22,6 @@ along with QEMU-PT. If not, see . #ifndef PT_H #define PT_H -void pt_init_decoder(CPUState *cpu); - int pt_enable(CPUState *cpu, bool hmp_mode); int pt_disable(CPUState *cpu, bool hmp_mode); int pt_enable_ip_filtering(CPUState *cpu, uint8_t addrn, bool redqueen, bool hmp_mode);