[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH v3 7/8] x86/hvm: Disallow access to unknown MSRs
> From: Roger Pau Monne <roger.pau@xxxxxxxxxx> > Sent: Tuesday, September 1, 2020 6:55 PM > > From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > > 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@xxxxxxxxxx> > [remove rdmsr_safe from default case in svm_msr_read_intercept] > Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx> > --- > Changes since v1: > - Fold chunk to remove explicit write handling of VMX MSRs just to > #GP. > - Remove catch-all rdmsr_safe in svm_msr_read_intercept. > --- > xen/arch/x86/hvm/svm/svm.c | 10 ++++------ > xen/arch/x86/hvm/vmx/vmx.c | 16 ++++------------ > 2 files changed, 8 insertions(+), 18 deletions(-) > > diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c > index 0e43154c7e..66b22efdab 100644 > --- a/xen/arch/x86/hvm/svm/svm.c > +++ b/xen/arch/x86/hvm/svm/svm.c > @@ -1964,8 +1964,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; > } > > @@ -2150,10 +2149,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; > } > > diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c > index f6657af923..9cc9d81c41 100644 > --- a/xen/arch/x86/hvm/vmx/vmx.c > +++ b/xen/arch/x86/hvm/vmx/vmx.c > @@ -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. */ > if ( vmx_msr_read_intercept(msr, &tmp) != X86EMUL_OKAY || > @@ -3320,10 +3313,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; > } > > -- > 2.28.0
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |