X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_mem.c;h=3753a932c479e4336bf5216d3a8b745ff9661570;hb=3040cb0b3c89d04aab4a6e229dcf4d2223a45295;hp=6bb9f5afe0dca884c2a7fbc68751f813fa49cd4a;hpb=a8627ddaccf49073eb04286c5ea4767e2903c351;p=palacios.git diff --git a/palacios/src/palacios/vmm_mem.c b/palacios/src/palacios/vmm_mem.c index 6bb9f5a..3753a93 100644 --- a/palacios/src/palacios/vmm_mem.c +++ b/palacios/src/palacios/vmm_mem.c @@ -72,6 +72,10 @@ int v3_init_mem_map(struct v3_vm_info * vm) { map->base_region.host_addr = (addr_t)V3_AllocPages(mem_pages); #endif + // Clear the memory... + memset(V3_VAddr((void *)map->base_region.host_addr), 0, mem_pages * PAGE_SIZE_4KB); + + map->base_region.flags.read = 1; map->base_region.flags.write = 1; map->base_region.flags.exec = 1; @@ -113,8 +117,14 @@ void v3_delete_mem_map(struct v3_vm_info * vm) { struct v3_mem_region * v3_create_mem_region(struct v3_vm_info * vm, uint16_t core_id, addr_t guest_addr_start, addr_t guest_addr_end) { - - struct v3_mem_region * entry = (struct v3_mem_region *)V3_Malloc(sizeof(struct v3_mem_region)); + struct v3_mem_region * entry = NULL; + + if (guest_addr_start >= guest_addr_end) { + PrintError("Region start is after region end\n"); + return NULL; + } + + entry = (struct v3_mem_region *)V3_Malloc(sizeof(struct v3_mem_region)); memset(entry, 0, sizeof(struct v3_mem_region)); entry->guest_start = guest_addr_start; @@ -302,6 +312,10 @@ static struct v3_mem_region * get_next_mem_region( struct v3_vm_info * vm, uint1 struct v3_mem_region * reg = NULL; struct v3_mem_region * parent = NULL; + if (n == NULL) { + return NULL; + } + while (n) { reg = rb_entry(n, struct v3_mem_region, tree_node);