uint8_t write_val = (hook_writes) ? 0x1 : 0x0;
uint8_t * bitmap = (uint8_t *)(vm->msr_map.arch_data);
+ if (index == -1) {
+ // 0rintError("Error updating MSR Map failed bitmap index for (0x%x)\n", msr);
+ // MSRs not in the bitmap covered range will always trigger exits, so we don't need to worry about them here.
+ return 0;
+ }
+
*(bitmap + major) &= ~(mask << minor);
*(bitmap + major) |= (read_val << minor);
}
int v3_init_vmx_msr_map(struct v3_vm_info * vm) {
+ void *temp;
+
struct v3_msr_map * msr_map = &(vm->msr_map);
msr_map->update_map = update_map;
- msr_map->arch_data = V3_VAddr(V3_AllocPages(1));
+ temp = V3_AllocPages(1);
+ if (!temp) {
+ PrintError("Cannot allocat MSR bitmap\n");
+ return -1;
+ }
+ msr_map->arch_data = V3_VAddr(temp);
memset(msr_map->arch_data, 0xff, PAGE_SIZE_4KB);
v3_refresh_msr_map(vm);