summaryrefslogtreecommitdiffstats
path: root/queue-3.16
diff options
context:
space:
mode:
authorBen Hutchings <ben@decadent.org.uk>2019-05-07 19:43:15 +0100
committerBen Hutchings <ben@decadent.org.uk>2019-05-07 19:43:15 +0100
commitb89b229ea01dcddeb5590a691b2e48ae10c9901b (patch)
tree09a97ae7f3f62e038ea2993ea6045b1753c8cde3 /queue-3.16
parentef21a9556d964e8da65ce0df6de508d5650308d7 (diff)
downloadlinux-stable-queue-b89b229ea01dcddeb5590a691b2e48ae10c9901b.tar.gz
Add KVM regression fix
Diffstat (limited to 'queue-3.16')
-rw-r--r--queue-3.16/kvm-vmx-fix-x2apic-check-in-vmx_msr_bitmap_mode.patch44
-rw-r--r--queue-3.16/series1
2 files changed, 45 insertions, 0 deletions
diff --git a/queue-3.16/kvm-vmx-fix-x2apic-check-in-vmx_msr_bitmap_mode.patch b/queue-3.16/kvm-vmx-fix-x2apic-check-in-vmx_msr_bitmap_mode.patch
new file mode 100644
index 00000000..900344e3
--- /dev/null
+++ b/queue-3.16/kvm-vmx-fix-x2apic-check-in-vmx_msr_bitmap_mode.patch
@@ -0,0 +1,44 @@
+From: Joerg Roedel <jroedel@suse.de>
+Date: Thu, 21 Feb 2019 15:30:48 +0000
+Subject: KVM: VMX: Fix x2apic check in vmx_msr_bitmap_mode()
+
+The stable backport of upstream commit
+
+ 904e14fb7cb96 KVM: VMX: make MSR bitmaps per-VCPU
+
+has a bug in vmx_msr_bitmap_mode(). It enables the x2apic
+MSR-bitmap when the kernel emulates x2apic for the guest in
+software. The upstream version of the commit checkes whether
+the hardware has virtualization enabled for x2apic
+emulation.
+
+Since KVM emulates x2apic for guests even when the host does
+not support x2apic in hardware, this causes the intercept of
+at least the X2APIC_TASKPRI MSR to be disabled on machines
+not supporting that MSR. The result is undefined behavior,
+on some machines (Intel Westmere based) it causes a crash of
+the guest kernel when it tries to access that MSR.
+
+Change the check in vmx_msr_bitmap_mode() to match the upstream
+code. This fixes the guest crashes observed with stable
+kernels starting with v4.4.168 through v4.4.175.
+
+Signed-off-by: Joerg Roedel <jroedel@suse.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/kvm/vmx.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/arch/x86/kvm/vmx.c
++++ b/arch/x86/kvm/vmx.c
+@@ -4224,7 +4224,9 @@ static u8 vmx_msr_bitmap_mode(struct kvm
+ {
+ u8 mode = 0;
+
+- if (irqchip_in_kernel(vcpu->kvm) && apic_x2apic_mode(vcpu->arch.apic)) {
++ if (cpu_has_secondary_exec_ctrls() &&
++ (vmcs_read32(SECONDARY_VM_EXEC_CONTROL) &
++ SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE)) {
+ mode |= MSR_BITMAP_MODE_X2APIC;
+ if (enable_apicv)
+ mode |= MSR_BITMAP_MODE_X2APIC_APICV;
diff --git a/queue-3.16/series b/queue-3.16/series
index 4fa59399..c54b617e 100644
--- a/queue-3.16/series
+++ b/queue-3.16/series
@@ -4,3 +4,4 @@ inet-update-the-ip-id-generation-algorithm-to-higher-standards.patch
spi-omap-100k-remove-unused-definitions.patch
vxlan-fix-big-endian-declaration-of-vni.patch
ipv4-fix-a-race-in-update_or_create_fnhe.patch
+kvm-vmx-fix-x2apic-check-in-vmx_msr_bitmap_mode.patch