mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86/hvm: disallow access to unknown MSRs
Change the catch-all behavior for MSR not explicitly handled. Instead of allow full read-access to the MSR space and silently dropping writes return an exception when the MSR is not explicitly handled. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> [remove rdmsr_safe from default case in svm_msr_read_intercept] Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com>
This commit is contained in:
1 parent
322ec7c89f
commit
84e848fd7a
2 files changed
+8
-18
No files matched your search
@@ -1961,8 +1961,7 @@ static int svm_msr_read_intercept(unsigned int msr, uint64_t *msr_content)
|
||||
break;
|
||||
|
||||
default:
|
||||
if ( rdmsr_safe(msr, *msr_content) == 0 )
|
||||
break;
|
||||
gdprintk(XENLOG_WARNING, "RDMSR 0x%08x unimplemented\n", msr);
|
||||
goto gpf;
|
||||
}
|
||||
|
||||
@@ -2147,10 +2146,9 @@ static int svm_msr_write_intercept(unsigned int msr, uint64_t msr_content)
|
||||
break;
|
||||
|
||||
default:
|
||||
/* Match up with the RDMSR side; ultimately this should go away. */
|
||||
if ( rdmsr_safe(msr, msr_content) == 0 )
|
||||
break;
|
||||
|
||||
gdprintk(XENLOG_WARNING,
|
||||
"WRMSR 0x%08x val 0x%016"PRIx64" unimplemented\n",
|
||||
msr, msr_content);
|
||||
goto gpf;
|
||||
}
|
||||
|
||||
|
||||
@@ -3015,9 +3015,7 @@ static int vmx_msr_read_intercept(unsigned int msr, uint64_t *msr_content)
|
||||
break;
|
||||
}
|
||||
|
||||
if ( rdmsr_safe(msr, *msr_content) == 0 )
|
||||
break;
|
||||
|
||||
gdprintk(XENLOG_WARNING, "RDMSR 0x%08x unimplemented\n", msr);
|
||||
goto gp_fault;
|
||||
}
|
||||
|
||||
@@ -3290,11 +3288,6 @@ static int vmx_msr_write_intercept(unsigned int msr, uint64_t msr_content)
|
||||
__vmwrite(GUEST_IA32_DEBUGCTL, msr_content);
|
||||
break;
|
||||
|
||||
case MSR_IA32_FEATURE_CONTROL:
|
||||
case MSR_IA32_VMX_BASIC ... MSR_IA32_VMX_VMFUNC:
|
||||
/* None of these MSRs are writeable. */
|
||||
goto gp_fault;
|
||||
|
||||
case MSR_IA32_MISC_ENABLE:
|
||||
/*
|
||||
* Silently drop writes that don't change the reported value: At least
|
||||
@@ -3324,10 +3317,9 @@ static int vmx_msr_write_intercept(unsigned int msr, uint64_t msr_content)
|
||||
is_last_branch_msr(msr) )
|
||||
break;
|
||||
|
||||
/* Match up with the RDMSR side; ultimately this should go away. */
|
||||
if ( rdmsr_safe(msr, msr_content) == 0 )
|
||||
break;
|
||||
|
||||
gdprintk(XENLOG_WARNING,
|
||||
"WRMSR 0x%08x val 0x%016"PRIx64" unimplemented\n",
|
||||
msr, msr_content);
|
||||
goto gp_fault;
|
||||
}
|
||||
|
||||
|
||||