]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.15-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 7 Mar 2018 15:03:48 +0000 (07:03 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 7 Mar 2018 15:03:48 +0000 (07:03 -0800)
added patches:
kvm-x86-fix-vcpu-initialization-with-userspace-lapic.patch

queue-4.15/kvm-x86-fix-vcpu-initialization-with-userspace-lapic.patch [new file with mode: 0644]
queue-4.15/series

diff --git a/queue-4.15/kvm-x86-fix-vcpu-initialization-with-userspace-lapic.patch b/queue-4.15/kvm-x86-fix-vcpu-initialization-with-userspace-lapic.patch
new file mode 100644 (file)
index 0000000..5714197
--- /dev/null
@@ -0,0 +1,75 @@
+From b7e31be385584afe7f073130e8e570d53c95f7fe Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= <rkrcmar@redhat.com>
+Date: Thu, 1 Mar 2018 15:24:25 +0100
+Subject: KVM: x86: fix vcpu initialization with userspace lapic
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Radim Krčmář <rkrcmar@redhat.com>
+
+commit b7e31be385584afe7f073130e8e570d53c95f7fe upstream.
+
+Moving the code around broke this rare configuration.
+Use this opportunity to finally call lapic reset from vcpu reset.
+
+Reported-by: syzbot+fb7a33a4b6c35007a72b@syzkaller.appspotmail.com
+Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
+Fixes: 0b2e9904c159 ("KVM: x86: move LAPIC initialization after VMCS creation")
+Cc: stable@vger.kernel.org
+Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/kvm/lapic.c |   10 ++++------
+ arch/x86/kvm/x86.c   |    3 ++-
+ 2 files changed, 6 insertions(+), 7 deletions(-)
+
+--- a/arch/x86/kvm/lapic.c
++++ b/arch/x86/kvm/lapic.c
+@@ -1993,14 +1993,13 @@ void kvm_lapic_set_base(struct kvm_vcpu
+ void kvm_lapic_reset(struct kvm_vcpu *vcpu, bool init_event)
+ {
+-      struct kvm_lapic *apic;
++      struct kvm_lapic *apic = vcpu->arch.apic;
+       int i;
+-      apic_debug("%s\n", __func__);
++      if (!apic)
++              return;
+-      ASSERT(vcpu);
+-      apic = vcpu->arch.apic;
+-      ASSERT(apic != NULL);
++      apic_debug("%s\n", __func__);
+       /* Stop the timer in case it's a reset to an active apic */
+       hrtimer_cancel(&apic->lapic_timer.timer);
+@@ -2559,7 +2558,6 @@ void kvm_apic_accept_events(struct kvm_v
+       pe = xchg(&apic->pending_events, 0);
+       if (test_bit(KVM_APIC_INIT, &pe)) {
+-              kvm_lapic_reset(vcpu, true);
+               kvm_vcpu_reset(vcpu, true);
+               if (kvm_vcpu_is_bsp(apic->vcpu))
+                       vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE;
+--- a/arch/x86/kvm/x86.c
++++ b/arch/x86/kvm/x86.c
+@@ -7793,7 +7793,6 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu
+       if (r)
+               return r;
+       kvm_vcpu_reset(vcpu, false);
+-      kvm_lapic_reset(vcpu, false);
+       kvm_mmu_setup(vcpu);
+       vcpu_put(vcpu);
+       return r;
+@@ -7836,6 +7835,8 @@ void kvm_arch_vcpu_destroy(struct kvm_vc
+ void kvm_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event)
+ {
++      kvm_lapic_reset(vcpu, init_event);
++
+       vcpu->arch.hflags = 0;
+       vcpu->arch.smi_pending = 0;
index de884b82459e4c0291ca6230ea7a12595ea6a854..251fe729cdbd82f547e854f1830ee5f84b7a6de6 100644 (file)
@@ -113,3 +113,4 @@ kvm-mmu-fix-overlap-between-public-and-private-memslots.patch
 kvm-x86-remove-indirect-msr-op-calls-from-spec_ctrl.patch
 kvm-x86-move-lapic-initialization-after-vmcs-creation.patch
 kvm-vmx-optimize-vmx_vcpu_run-and-svm_vcpu_run-by-marking-the-rdmsr-path-as-unlikely.patch
+kvm-x86-fix-vcpu-initialization-with-userspace-lapic.patch