|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFC PATCH 03/22] x86/msr: always allow a pinned Dom0 to read any unknown MSR
From: Edwin Török <edvin.torok@xxxxxxxxxx>
This can be useful if you realize you have to inspect the value of an
MSR in production, without having to change into a new Xen first that
handles the MSR.
E.g. SMI count didn't use to be explicitly allowed in the past
(it now is, see a previous commit), but there could be other MSRs that
are useful when tracking down issues.
Backport: 4.15+
Signed-off-by: Edwin Török <edvin.torok@xxxxxxxxxx>
---
xen/arch/x86/hvm/svm/svm.c | 3 +++
xen/arch/x86/hvm/vmx/vmx.c | 3 +++
xen/arch/x86/pv/emul-priv-op.c | 3 +++
3 files changed, 9 insertions(+)
diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c
index 24c417ca71..45f8e1ffd1 100644
--- a/xen/arch/x86/hvm/svm/svm.c
+++ b/xen/arch/x86/hvm/svm/svm.c
@@ -1933,6 +1933,9 @@ static int cf_check svm_msr_read_intercept(
break;
default:
+ if ( is_hwdom_pinned_vcpu(v) && !rdmsr_safe(msr, *msr_content) )
+ break;
+
if ( d->arch.msr_relaxed && !rdmsr_safe(msr, tmp) )
{
*msr_content = 0;
diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c
index 1edc7f1e91..f6e5123f66 100644
--- a/xen/arch/x86/hvm/vmx/vmx.c
+++ b/xen/arch/x86/hvm/vmx/vmx.c
@@ -3377,6 +3377,9 @@ static int cf_check vmx_msr_read_intercept(
if ( vmx_read_guest_msr(curr, msr, msr_content) == 0 )
break;
+ if ( is_hwdom_pinned_vcpu(curr) && !rdmsr_safe(msr, *msr_content) )
+ return X86EMUL_OKAY;
+
if ( is_last_branch_msr(msr) )
{
*msr_content = 0;
diff --git a/xen/arch/x86/pv/emul-priv-op.c b/xen/arch/x86/pv/emul-priv-op.c
index 0d9f84f458..978ae679a2 100644
--- a/xen/arch/x86/pv/emul-priv-op.c
+++ b/xen/arch/x86/pv/emul-priv-op.c
@@ -985,6 +985,9 @@ static int cf_check read_msr(
}
/* fall through */
default:
+ if ( is_hwdom_pinned_vcpu(curr) && !rdmsr_safe(reg, *val) )
+ return X86EMUL_OKAY;
+
if ( currd->arch.msr_relaxed && !rdmsr_safe(reg, tmp) )
{
*val = 0;
--
2.41.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |