x86/HVM: don't give the wrong impression of WRMSR succeeding

... for non-existent MSRs: wrmsr_hypervisor_regs()'s comment clearly
says that the function returns 0 for unrecognized MSRs, so
{svm,vmx}_msr_write_intercept() should not convert this into success. We
don't want to unconditionally fail the access though, as we can't be
certain the list of handled MSRs is complete enough for the guest types
we care about, so instead mirror what we do on the read paths and probe
the MSR to decide whether to raise #GP.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
This commit is contained in:
Jan Beulich committed 2018-02-27 15:12:23 +01:00
1 parent 4068173550
commit 1f1d183d49
2 files changed
+14

No files matched your search

+7
View File
@@ -2128,6 +2128,13 @@ static int svm_msr_write_intercept(unsigned int msr, uint64_t msr_content)
result = X86EMUL_RETRY;
break;
case 0:
/*
* Match up with the RDMSR side for now; ultimately this entire
* case block should go away.
*/
if ( rdmsr_safe(msr, msr_content) == 0 )
break;
goto gpf;
case 1:
break;
default:
+7
View File
@@ -3191,6 +3191,13 @@ static int vmx_msr_write_intercept(unsigned int msr, uint64_t msr_content)
case -ERESTART:
return X86EMUL_RETRY;
case 0:
/*
* Match up with the RDMSR side for now; ultimately this
* entire case block should go away.
*/
if ( rdmsr_safe(msr, msr_content) == 0 )
break;
goto gp_fault;
case 1:
break;
default:
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.