static addr_t create_ept_page() {
+ void * temp;
void * page = 0;
- page = V3_VAddr(V3_AllocPages(1));
+
+ temp = V3_AllocPages(1);
+ if (!temp) {
+ PrintError(VM_NONE, VCORE_NONE, "Cannot allocate EPT page\n");
+ return 0;
+ }
+ page = V3_VAddr(temp);
memset(page, 0, PAGE_SIZE);
return (addr_t)page;
if (ept_info->pg_walk_len4) {
ept_ptr->pwl1 = 3;
} else {
- PrintError("Unsupported EPT Table depth\n");
+ PrintError(core->vm_info, core, "Unsupported EPT Table depth\n");
return -1;
}
error_code.write = ept_qual->write;
if (region == NULL) {
- PrintError("invalid region, addr=%p\n", (void *)fault_addr);
+ PrintError(core->vm_info, core, "invalid region, addr=%p\n", (void *)fault_addr);
return -1;
}
// Full access
pde2mb[pde_index].read = 1;
pde2mb[pde_index].exec = 1;
-
+ pde2mb[pde_index].ipat = 1;
+ pde2mb[pde_index].mt = 6;
+
if (region->flags.write == 1) {
pde2mb[pde_index].write = 1;
} else {
}
if (v3_gpa_to_hpa(core, fault_addr, &host_addr) == -1) {
- PrintError("Error: Could not translate fault addr (%p)\n", (void *)fault_addr);
+ PrintError(core->vm_info, core, "Error: Could not translate fault addr (%p)\n", (void *)fault_addr);
return -1;
}
// Full access
pte[pte_index].read = 1;
pte[pte_index].exec = 1;
+ pte[pte_index].ipat = 1;
+ pte[pte_index].mt = 6;
if (region->flags.write == 1) {
pte[pte_index].write = 1;
}
if (v3_gpa_to_hpa(core, fault_addr, &host_addr) == -1) {
- PrintError("Error Could not translate fault addr (%p)\n", (void *)fault_addr);
+ PrintError(core->vm_info, core, "Error Could not translate fault addr (%p)\n", (void *)fault_addr);
return -1;
}