static int get_bitmap_index(uint_t msr) {
+ // unsigend cmoparison with zero intentional for clarity
if ((msr >= PENTIUM_MSRS_START) &&
(msr <= PENTIUM_MSRS_END)) {
return (PENTIUM_MSRS_INDEX + (msr - PENTIUM_MSRS_START));
(msr <= AMD_7_8_GEN_MSRS_END)) {
return (AMD_7_8_GEN_MSRS_INDEX + (msr - AMD_7_8_GEN_MSRS_START));
} else {
- PrintError("MSR out of range (MSR=0x%x)\n", msr);
+ PrintError(VM_NONE, VCORE_NONE, "MSR out of range (MSR=0x%x)\n", msr);
return -1;
}
}
uint8_t * bitmap = (uint8_t *)(vm->msr_map.arch_data);
if (index == -1) {
- PrintError("MSR (0x%x) out of bitmap range\n", msr);
+ PrintError(vm, VCORE_NONE, "MSR (0x%x) out of bitmap range\n", msr);
return 0;
}
msr_map->update_map = update_map;
- temp = V3_AllocPages(2);
+ temp = V3_AllocPages(2); // need not be shadow-safe, not exposed to guest
if (!temp) {
- PrintError("Cannot allocate msr bitmap\n");
+ PrintError(vm, VCORE_NONE, "Cannot allocate msr bitmap\n");
return -1;
}
}
int v3_deinit_svm_msr_map(struct v3_vm_info * vm) {
- V3_FreePages(V3_PAddr(vm->msr_map.arch_data), 2);
+ if (vm->msr_map.arch_data) {
+ V3_FreePages(V3_PAddr(vm->msr_map.arch_data), 2);
+ }
return 0;
}