From: Jack Lange Date: Tue, 16 Aug 2011 23:41:39 +0000 (-0400) Subject: added memory unhooking error checking to fix CGA deinit crash X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=commitdiff_plain;h=47d42b85720b6388c7cd59554a9e458bd72664c4 added memory unhooking error checking to fix CGA deinit crash --- diff --git a/palacios/src/devices/cga.c b/palacios/src/devices/cga.c index e9556c8..7997818 100644 --- a/palacios/src/devices/cga.c +++ b/palacios/src/devices/cga.c @@ -1153,12 +1153,14 @@ static int cga_init(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { PrintDebug("Enabling CGA Passthrough\n"); if (v3_hook_write_mem(vm, V3_MEM_CORE_ANY, START_ADDR, END_ADDR, START_ADDR, &video_write_mem, dev) == -1) { - PrintDebug("\n\nVideo Hook failed.\n\n"); + PrintError("\n\nVideo Hook failed.\n\n"); + return -1; } } else { if (v3_hook_write_mem(vm, V3_MEM_CORE_ANY, START_ADDR, END_ADDR, video_state->framebuf_pa, &video_write_mem, dev) == -1) { - PrintDebug("\n\nVideo Hook failed.\n\n"); + PrintError("\n\nVideo Hook failed.\n\n"); + return -1; } } diff --git a/palacios/src/palacios/vmm_mem_hook.c b/palacios/src/palacios/vmm_mem_hook.c index 298bc8f..a0753cf 100644 --- a/palacios/src/palacios/vmm_mem_hook.c +++ b/palacios/src/palacios/vmm_mem_hook.c @@ -394,7 +394,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);