From: Greg Kroah-Hartman Date: Wed, 7 Mar 2018 15:03:48 +0000 (-0800) Subject: 4.15-stable patches X-Git-Tag: v4.14.25~27 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1b94e51c0910e2088ebd8dd773b5137744477ba0;p=thirdparty%2Fkernel%2Fstable-queue.git 4.15-stable patches added patches: kvm-x86-fix-vcpu-initialization-with-userspace-lapic.patch --- 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 index 00000000000..5714197ebaa --- /dev/null +++ b/queue-4.15/kvm-x86-fix-vcpu-initialization-with-userspace-lapic.patch @@ -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?= +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ář + +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 +Fixes: 0b2e9904c159 ("KVM: x86: move LAPIC initialization after VMCS creation") +Cc: stable@vger.kernel.org +Signed-off-by: Radim Krčmář +Signed-off-by: Greg Kroah-Hartman + +--- + 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; diff --git a/queue-4.15/series b/queue-4.15/series index de884b82459..251fe729cdb 100644 --- a/queue-4.15/series +++ b/queue-4.15/series @@ -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