Emulate writes to the IA32_MISC_ENABLE MSR.
PR: 196093 Reported by: db Tested by: db Discussed with: grehan MFC after: 1 week
This commit is contained in:
parent
8f1c7a6d1b
commit
9abef2383d
@ -376,9 +376,31 @@ vmx_rdmsr(struct vmx *vmx, int vcpuid, u_int num, uint64_t *val, bool *retu)
|
|||||||
int
|
int
|
||||||
vmx_wrmsr(struct vmx *vmx, int vcpuid, u_int num, uint64_t val, bool *retu)
|
vmx_wrmsr(struct vmx *vmx, int vcpuid, u_int num, uint64_t val, bool *retu)
|
||||||
{
|
{
|
||||||
int error = 0;
|
uint64_t changed;
|
||||||
|
int error;
|
||||||
|
|
||||||
|
error = 0;
|
||||||
switch (num) {
|
switch (num) {
|
||||||
|
case MSR_IA32_MISC_ENABLE:
|
||||||
|
changed = val ^ misc_enable;
|
||||||
|
/*
|
||||||
|
* If the host has disabled the NX feature then the guest
|
||||||
|
* also cannot use it. However, a Linux guest will try to
|
||||||
|
* enable the NX feature by writing to the MISC_ENABLE MSR.
|
||||||
|
*
|
||||||
|
* This can be safely ignored because the memory management
|
||||||
|
* code looks at CPUID.80000001H:EDX.NX to check if the
|
||||||
|
* functionality is actually enabled.
|
||||||
|
*/
|
||||||
|
changed &= ~(1UL << 34);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Punt to userspace if any other bits are being modified.
|
||||||
|
*/
|
||||||
|
if (changed)
|
||||||
|
error = EINVAL;
|
||||||
|
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
error = EINVAL;
|
error = EINVAL;
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user