X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_mem_hook.c;h=1d49294ba4f188bbb09ecf2a6a5ccd0a52341df3;hb=4d1d8fadad33de7d3ebce2083d9782048f78b44e;hp=f4040ff3497165482970012184cd123ed1491917;hpb=acaadd79c597c8d5180fbfbec79c01fef3dff003;p=palacios.git diff --git a/palacios/src/palacios/vmm_mem_hook.c b/palacios/src/palacios/vmm_mem_hook.c index f4040ff..1d49294 100644 --- a/palacios/src/palacios/vmm_mem_hook.c +++ b/palacios/src/palacios/vmm_mem_hook.c @@ -359,6 +359,12 @@ int v3_hook_write_mem(struct v3_vm_info * vm, uint16_t core_id, entry = v3_create_mem_region(vm, core_id, guest_addr_start, guest_addr_end); + if (!entry) { + PrintError(vm, VCORE_NONE, "Cannot allocate a memory region\n"); + V3_Free(hook); + return -1; + } + hook->region = entry; entry->host_addr = host_addr; @@ -370,6 +376,7 @@ int v3_hook_write_mem(struct v3_vm_info * vm, uint16_t core_id, entry->flags.alloced = 1; if (v3_insert_mem_region(vm, entry) == -1) { + PrintError(vm, VCORE_NONE, "Cannot insert memory region\n"); V3_Free(entry); V3_Free(hook); return -1; @@ -498,6 +505,7 @@ 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 v3_mem_hooks * hooks = &(vm->mem_hooks); struct mem_hook * hook = NULL; if (reg == NULL) { @@ -515,6 +523,8 @@ int v3_unhook_mem(struct v3_vm_info * vm, uint16_t core_id, addr_t guest_addr_st free_hook(vm, hook); + v3_htable_remove(hooks->reg_table, (addr_t)reg, 0); + return 0; }