X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_mem_hook.c;h=98aabdc879df2097c68e8c68c626a4482786f5e6;hb=92082ed86bcfd503e28dbedb24c79c3dc797dc87;hp=ee632b0bb09759dc67611a93ddd6e50a118ea0b4;hpb=a8627ddaccf49073eb04286c5ea4767e2903c351;p=palacios.releases.git diff --git a/palacios/src/palacios/vmm_mem_hook.c b/palacios/src/palacios/vmm_mem_hook.c index ee632b0..98aabdc 100644 --- a/palacios/src/palacios/vmm_mem_hook.c +++ b/palacios/src/palacios/vmm_mem_hook.c @@ -135,7 +135,7 @@ static int handle_mem_hook(struct guest_info * core, addr_t guest_va, addr_t gue } if (ret == -1) { - PrintError("Could not translate Instruction Address (%p)\n", (void *)core->rip); + PrintError("Could not translate Instruction Address (%p)\n", (void *)(addr_t)core->rip); return -1; } @@ -240,6 +240,11 @@ static int handle_mem_hook(struct guest_info * core, addr_t guest_va, addr_t gue mem_op_size = ((uint_t)src_req_size < (uint_t)dst_req_size) ? src_req_size : dst_req_size; + if (mem_op_size == -1) { + PrintError("Error: Did not detect any memory operands...\n"); + return -1; + } + /* Now handle the hooks if necessary */ if ( (src_hook != NULL) && (src_hook->read != NULL) && @@ -394,7 +399,20 @@ static int free_hook(struct v3_vm_info * vm, struct mem_hook * hook) { // We do not support unhooking subregions int v3_unhook_mem(struct v3_vm_info * vm, uint16_t core_id, addr_t guest_addr_start) { struct v3_mem_region * reg = v3_get_mem_region(vm, core_id, guest_addr_start); - struct mem_hook * hook = reg->priv_data; + struct mem_hook * hook = NULL; + + if (reg == NULL) { + PrintError("Could not find region at %p\n", (void *)guest_addr_start); + return -1; + } + + hook = reg->priv_data; + + if (hook == NULL) { + PrintError("Trying to unhook region that is not a hook at %p\n", (void *)guest_addr_start); + return -1; + } + free_hook(vm, hook);