X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_emulator.c;h=37fa3f96a34b2450e960666222bec1c2a9196926;hb=cafbc1318c847b8c18e2036dc56be7af7acefa4e;hp=3294aa0dec2d8bb3e816f4e6af29c464813e2661;hpb=101b1bdfedbf377765d7c74641e9bcf356ebed18;p=palacios-OLD.git diff --git a/palacios/src/palacios/vmm_emulator.c b/palacios/src/palacios/vmm_emulator.c index 3294aa0..37fa3f9 100644 --- a/palacios/src/palacios/vmm_emulator.c +++ b/palacios/src/palacios/vmm_emulator.c @@ -154,6 +154,11 @@ int v3_emulate_memory_read(struct guest_info * info, addr_t read_gva, ret = read_guest_va_memory(info, get_addr_linear(info, info->rip, &(info->segments.cs)), 15, instr); } + if (ret == -1) { + PrintError("Could not read guest memory\n"); + return -1; + } + #ifdef DEBUG_EMULATOR PrintDebug("Instr (15 bytes) at %x:\n", instr); PrintTraceMemDump(instr, 15); @@ -183,7 +188,8 @@ int v3_emulate_memory_read(struct guest_info * info, addr_t read_gva, // Read the data directly onto the emulated page - if (read(read_gpa, (void *)(data_page->page_addr + data_addr_offset), instr_info.op_size, private_data) != instr_info.op_size) { + ret = read(read_gpa, (void *)(data_page->page_addr + data_addr_offset), instr_info.op_size, private_data); + if ((ret == -1) || ((uint_t)ret != instr_info.op_size)) { PrintError("Read error in emulator\n"); V3_FreePage((void *)(data_page->page_addr)); V3_Free(data_page);