[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86/vmx: Don't use hvm_inject_hw_exception() in long_mode_do_msr_write()
commit 896ee3980e72866b602e743396751384de301fb0 Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Wed Dec 6 17:46:20 2017 +0000 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Thu Dec 14 18:05:45 2017 +0000 x86/vmx: Don't use hvm_inject_hw_exception() in long_mode_do_msr_write() Since c/s 49de10f3c1718 "x86/hvm: Don't raise #GP behind the emulators back for MSR accesses", returning X86EMUL_EXCEPTION has pushed the exception generation to the top of the call tree. Using hvm_inject_hw_exception() and returning X86EMUL_EXCEPTION causes a double #GP injection, which combines to #DF. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Acked-by: Kevin Tian <kevin.tian@xxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> --- xen/arch/x86/hvm/vmx/vmx.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index b18ccea..73254bf 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -542,7 +542,7 @@ long_mode_do_msr_write(unsigned int msr, uint64_t msr_content) case MSR_GS_BASE: case MSR_SHADOW_GS_BASE: if ( !is_canonical_address(msr_content) ) - goto uncanonical_address; + return HNDL_exception_raised; if ( msr == MSR_FS_BASE ) __vmwrite(GUEST_FS_BASE, msr_content); @@ -560,14 +560,14 @@ long_mode_do_msr_write(unsigned int msr, uint64_t msr_content) case MSR_LSTAR: if ( !is_canonical_address(msr_content) ) - goto uncanonical_address; + return HNDL_exception_raised; v->arch.hvm_vmx.lstar = msr_content; wrmsrl(MSR_LSTAR, msr_content); break; case MSR_CSTAR: if ( !is_canonical_address(msr_content) ) - goto uncanonical_address; + return HNDL_exception_raised; v->arch.hvm_vmx.cstar = msr_content; break; @@ -581,11 +581,6 @@ long_mode_do_msr_write(unsigned int msr, uint64_t msr_content) } return HNDL_done; - - uncanonical_address: - HVM_DBG_LOG(DBG_LEVEL_MSR, "Not cano address of msr write %x", msr); - hvm_inject_hw_exception(TRAP_gp_fault, 0); - return HNDL_exception_raised; } /* -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |