#define MEM_OFFSET_HCALL 0x1000
-
static inline
struct v3_shadow_region * insert_shadow_region(struct guest_info * info,
struct v3_shadow_region * region);
v3_delete_shadow_region(info, reg);
}
+
+ V3_FreePage((void *)(info->mem_map.base_region.host_addr));
+ V3_FreePage(V3_PAddr((void *)(info->mem_map.hook_hva)));
}
v3_rb_insert_color(&(region->tree_node), &(info->mem_map.shdw_regions));
+
+ // flush virtual page tables
+ // 3 cases shadow, shadow passthrough, and nested
+
return NULL;
}
addr_t dst_addr = (addr_t)V3_VAddr((void *)v3_get_shadow_addr(reg, guest_pa));
- if (v3_emulate_write_op(info, guest_va, guest_pa, dst_addr, reg->write_hook, reg->priv_data) == -1) {
+ if (v3_emulate_write_op(info, guest_va, guest_pa, dst_addr,
+ reg->write_hook, reg->priv_data) == -1) {
PrintError("Write hook emulation failed\n");
return -1;
}
addr_t op_addr = info->mem_map.hook_hva;
if (access_info.write == 1) {
- if (v3_emulate_write_op(info, guest_va, guest_pa, op_addr, reg->write_hook, reg->priv_data) == -1) {
+ if (v3_emulate_write_op(info, guest_va, guest_pa, op_addr,
+ reg->write_hook, reg->priv_data) == -1) {
PrintError("Write Full Hook emulation failed\n");
return -1;
}
} else {
- if (v3_emulate_read_op(info, guest_va, guest_pa, op_addr, reg->read_hook, reg->write_hook, reg->priv_data) == -1) {
+ if (v3_emulate_read_op(info, guest_va, guest_pa, op_addr,
+ reg->read_hook, reg->write_hook,
+ reg->priv_data) == -1) {
PrintError("Read Full Hook emulation failed\n");
return -1;
}
V3_Free(reg);
}
+
+ // flush virtual page tables
+ // 3 cases shadow, shadow passthrough, and nested
+
}