All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] KVM: x86: no need to check CPL for XSETBV on VMX
@ 2016-04-15  1:55 Yang Zhang
  2016-04-15 10:11 ` Paolo Bonzini
  0 siblings, 1 reply; 7+ messages in thread
From: Yang Zhang @ 2016-04-15  1:55 UTC (permalink / raw)
  To: kvm@vger.kernel.org, Paolo Bonzini, rkrcmar@redhat.com

The CPL check for XSETBV instruction is done by hardware on VMX.
It only needs by SVM.

Signed-off-by: Yang Zhang <yang.zhang.wz@gmail.com>
---
  arch/x86/kvm/svm.c | 4 +++-
  arch/x86/kvm/x86.c | 3 +--
  2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index 31346a3..14680f5 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -2715,7 +2715,9 @@ static int xsetbv_interception(struct vcpu_svm *svm)
  	u64 new_bv = kvm_read_edx_eax(&svm->vcpu);
  	u32 index = kvm_register_read(&svm->vcpu, VCPU_REGS_RCX);

-	if (kvm_set_xcr(&svm->vcpu, index, new_bv) == 0) {
+	if (svm_get_cpl(&svm->vcpu) != 0)
+		kvm_inject_gp(&svm->vcpu, 0);
+	else if (kvm_set_xcr(&svm->vcpu, index, new_bv) == 0) {
  		svm->next_rip = kvm_rip_read(&svm->vcpu) + 3;
  		skip_emulated_instruction(&svm->vcpu);
  	}
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 8f57335..3cfc59f 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -709,8 +709,7 @@ static int __kvm_set_xcr(struct kvm_vcpu *vcpu, u32 
index, u64 xcr)

  int kvm_set_xcr(struct kvm_vcpu *vcpu, u32 index, u64 xcr)
  {
-	if (kvm_x86_ops->get_cpl(vcpu) != 0 ||
-	    __kvm_set_xcr(vcpu, index, xcr)) {
+	if (__kvm_set_xcr(vcpu, index, xcr)) {
  		kvm_inject_gp(vcpu, 0);
  		return 1;
  	}
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2016-04-15 11:23 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-15  1:55 [PATCH] KVM: x86: no need to check CPL for XSETBV on VMX Yang Zhang
2016-04-15 10:11 ` Paolo Bonzini
2016-04-15 10:37   ` Yang Zhang
2016-04-15 10:43     ` Paolo Bonzini
2016-04-15 10:55       ` Yang Zhang
2016-04-15 11:03         ` Paolo Bonzini
2016-04-15 11:23           ` Yang Zhang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.