case 8:
*((uint64_t*)dst) = (uint64_t)val;
break;
+ default:
+ return -1;
}
case VMCS_GUEST_DBG_CTL_HIGH:
case VMCS_GUEST_PERF_GLOBAL_CTRL_HIGH:
case VMCS_HOST_PERF_GLOBAL_CTRL_HIGH:
+ case VMCS_GUEST_EFER_HIGH:
return 4;
/* Natural Width Control Fields */
case VMCS_HOST_SYSENTER_EIP:
case VMCS_HOST_RSP:
case VMCS_HOST_RIP:
+ case VMCS_GUEST_EFER:
return sizeof(addr_t);
default:
- PrintError("Invalid VMCS field\n");
+ PrintError("Invalid VMCS field: 0x%x\n", field);
return -1;
}
}
#endif
// Handle any exits needed still in the atomic section
- if (v3_handle_vmx_exit(info, &exit_info) == -1) {
+ if (v3_handle_atomic_vmx_exit(info, &exit_info) == -1) {
PrintError("Error in atomic VMX exit handler\n");
return -1;
}
return -1;
}
- if (vmx_info->state == VMXASSIST_ENABLED) {
+ if (vmx_info->assist_state == VMXASSIST_ENABLED) {
PrintDebug("Loading VMXASSIST at RIP: %p\n", (void *)(addr_t)info->rip);
} else {
PrintDebug("Leaving VMXASSIST and entering protected mode at RIP: %p\n",