]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Jun 2013 17:04:42 +0000 (10:04 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Jun 2013 17:04:42 +0000 (10:04 -0700)
added patches:
kvm-x86-remove-vcpu-s-cpl-check-in-host-invoked-xcr-set.patch

queue-3.4/kvm-x86-remove-vcpu-s-cpl-check-in-host-invoked-xcr-set.patch [new file with mode: 0644]
queue-3.4/series

diff --git a/queue-3.4/kvm-x86-remove-vcpu-s-cpl-check-in-host-invoked-xcr-set.patch b/queue-3.4/kvm-x86-remove-vcpu-s-cpl-check-in-host-invoked-xcr-set.patch
new file mode 100644 (file)
index 0000000..016f8c2
--- /dev/null
@@ -0,0 +1,54 @@
+From 764bcbc5a6d7a2f3e75c9f0e4caa984e2926e346 Mon Sep 17 00:00:00 2001
+From: "Zhanghaoyu (A)" <haoyu.zhang@huawei.com>
+Date: Fri, 14 Jun 2013 07:36:13 +0000
+Subject: KVM: x86: remove vcpu's CPL check in host-invoked XCR set
+
+From: "Zhanghaoyu (A)" <haoyu.zhang@huawei.com>
+
+commit 764bcbc5a6d7a2f3e75c9f0e4caa984e2926e346 upstream.
+
+__kvm_set_xcr function does the CPL check when set xcr. __kvm_set_xcr is
+called in two flows, one is invoked by guest, call stack shown as below,
+
+  handle_xsetbv(or xsetbv_interception)
+    kvm_set_xcr
+      __kvm_set_xcr
+
+the other one is invoked by host, for example during system reset:
+
+  kvm_arch_vcpu_ioctl
+    kvm_vcpu_ioctl_x86_set_xcrs
+      __kvm_set_xcr
+
+The former does need the CPL check, but the latter does not.
+
+Signed-off-by: Zhang Haoyu <haoyu.zhang@huawei.com>
+[Tweaks to commit message. - Paolo]
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/kvm/x86.c |    5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+--- a/arch/x86/kvm/x86.c
++++ b/arch/x86/kvm/x86.c
+@@ -555,8 +555,6 @@ int __kvm_set_xcr(struct kvm_vcpu *vcpu,
+       if (index != XCR_XFEATURE_ENABLED_MASK)
+               return 1;
+       xcr0 = xcr;
+-      if (kvm_x86_ops->get_cpl(vcpu) != 0)
+-              return 1;
+       if (!(xcr0 & XSTATE_FP))
+               return 1;
+       if ((xcr0 & XSTATE_YMM) && !(xcr0 & XSTATE_SSE))
+@@ -570,7 +568,8 @@ int __kvm_set_xcr(struct kvm_vcpu *vcpu,
+ int kvm_set_xcr(struct kvm_vcpu *vcpu, u32 index, u64 xcr)
+ {
+-      if (__kvm_set_xcr(vcpu, index, xcr)) {
++      if (kvm_x86_ops->get_cpl(vcpu) != 0 ||
++          __kvm_set_xcr(vcpu, index, xcr)) {
+               kvm_inject_gp(vcpu, 0);
+               return 1;
+       }
index 1c4e34debdb598286ce0f16b33fe705b537d8f6b..3c3b1360090befdc31ada538b8faba0a869e739d 100644 (file)
@@ -2,3 +2,4 @@ alsa-usb-audio-fix-invalid-volume-resolution-for-logitech-hd-webcam-c310.patch
 alsa-usb-audio-work-around-android-accessory-firmware-bug.patch
 clk-remove-notifier-from-list-before-freeing-it.patch
 tilepro-work-around-module-link-error-with-gcc-4.7.patch
+kvm-x86-remove-vcpu-s-cpl-check-in-host-invoked-xcr-set.patch