* [PATCH stable-4.4.y] KVM: VMX: Fix x2apic check in vmx_msr_bitmap_mode() @ 2019-02-21 13:52 Joerg Roedel 2019-02-21 14:15 ` Greg Kroah-Hartman 0 siblings, 1 reply; 7+ messages in thread From: Joerg Roedel @ 2019-02-21 13:52 UTC (permalink / raw) To: Greg Kroah-Hartman, stable Cc: Ben Hutchings, David Woodhouse, Paolo Bonzini, Jim Mattson, linux-kernel, Joerg Roedel From: Joerg Roedel <jroedel@suse.de> 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> --- arch/x86/kvm/vmx.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index aee2886a387c..14553f6c03a6 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -4628,7 +4628,9 @@ static u8 vmx_msr_bitmap_mode(struct kvm_vcpu *vcpu) { 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; -- 2.16.3 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH stable-4.4.y] KVM: VMX: Fix x2apic check in vmx_msr_bitmap_mode() 2019-02-21 13:52 [PATCH stable-4.4.y] KVM: VMX: Fix x2apic check in vmx_msr_bitmap_mode() Joerg Roedel @ 2019-02-21 14:15 ` Greg Kroah-Hartman 2019-02-21 14:47 ` Joerg Roedel 0 siblings, 1 reply; 7+ messages in thread From: Greg Kroah-Hartman @ 2019-02-21 14:15 UTC (permalink / raw) To: Joerg Roedel Cc: stable, Ben Hutchings, David Woodhouse, Paolo Bonzini, Jim Mattson, linux-kernel, Joerg Roedel On Thu, Feb 21, 2019 at 02:52:13PM +0100, Joerg Roedel wrote: > From: Joerg Roedel <jroedel@suse.de> > > 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> > --- > arch/x86/kvm/vmx.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c > index aee2886a387c..14553f6c03a6 100644 > --- a/arch/x86/kvm/vmx.c > +++ b/arch/x86/kvm/vmx.c > @@ -4628,7 +4628,9 @@ static u8 vmx_msr_bitmap_mode(struct kvm_vcpu *vcpu) > { > 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; > -- > 2.16.3 > Ugh, good catch! Any hint as to what type of testing that you did that caught this? I keep asking people to run some kvm tests, but so far no one is :( thanks, greg k-h ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH stable-4.4.y] KVM: VMX: Fix x2apic check in vmx_msr_bitmap_mode() 2019-02-21 14:15 ` Greg Kroah-Hartman @ 2019-02-21 14:47 ` Joerg Roedel 2019-02-21 16:20 ` Greg Kroah-Hartman 0 siblings, 1 reply; 7+ messages in thread From: Joerg Roedel @ 2019-02-21 14:47 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Joerg Roedel, stable, Ben Hutchings, David Woodhouse, Paolo Bonzini, Jim Mattson, linux-kernel On Thu, Feb 21, 2019 at 03:15:30PM +0100, Greg Kroah-Hartman wrote: > Ugh, good catch! > > Any hint as to what type of testing that you did that caught this? I > keep asking people to run some kvm tests, but so far no one is :( We caught this at SUSE while testing candidate kernel updates for one of our service packs using a 4.4-based kernel and debugging turned out that this is issue came in via stable-updates. We also build a vanilla-flavour of the kernel which is nearly identical to the upstream stable tree, but what usually ends up in testing is the full tree with other backports. This particular issue was found by updating some openstack machines with the candidate kernel, which then triggered the problem in some guests. It is also a very special one, since I was only able to trigger the problem on Westmere-based machines with a specific guest-config. Regards, Joerg ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH stable-4.4.y] KVM: VMX: Fix x2apic check in vmx_msr_bitmap_mode() 2019-02-21 14:47 ` Joerg Roedel @ 2019-02-21 16:20 ` Greg Kroah-Hartman 2019-02-21 17:00 ` Ben Hutchings 2019-02-21 17:15 ` Sean Christopherson 0 siblings, 2 replies; 7+ messages in thread From: Greg Kroah-Hartman @ 2019-02-21 16:20 UTC (permalink / raw) To: Joerg Roedel Cc: Joerg Roedel, stable, Ben Hutchings, David Woodhouse, Paolo Bonzini, Jim Mattson, linux-kernel On Thu, Feb 21, 2019 at 03:47:01PM +0100, Joerg Roedel wrote: > On Thu, Feb 21, 2019 at 03:15:30PM +0100, Greg Kroah-Hartman wrote: > > Ugh, good catch! > > > > Any hint as to what type of testing that you did that caught this? I > > keep asking people to run some kvm tests, but so far no one is :( > > We caught this at SUSE while testing candidate kernel updates for one of > our service packs using a 4.4-based kernel and debugging turned > out that this is issue came in via stable-updates. We also build a > vanilla-flavour of the kernel which is nearly identical to the upstream > stable tree, but what usually ends up in testing is the full tree with > other backports. > > This particular issue was found by updating some openstack machines with > the candidate kernel, which then triggered the problem in some guests. > It is also a very special one, since I was only able to trigger the > problem on Westmere-based machines with a specific guest-config. Nice work. Any chance that "test" could be added to the kvm testing scripts that I think are being worked on somewhere? Ideally we would have caught this before it ever hit the stable tree. Due to the lack of good KVM testing, that's one of the areas I am always most worried about :( thanks, greg k-h ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH stable-4.4.y] KVM: VMX: Fix x2apic check in vmx_msr_bitmap_mode() 2019-02-21 16:20 ` Greg Kroah-Hartman @ 2019-02-21 17:00 ` Ben Hutchings 2019-02-21 17:15 ` Sean Christopherson 1 sibling, 0 replies; 7+ messages in thread From: Ben Hutchings @ 2019-02-21 17:00 UTC (permalink / raw) To: Greg Kroah-Hartman, Joerg Roedel Cc: Joerg Roedel, stable, David Woodhouse, Paolo Bonzini, Jim Mattson, linux-kernel On Thu, 2019-02-21 at 17:20 +0100, Greg Kroah-Hartman wrote: > On Thu, Feb 21, 2019 at 03:47:01PM +0100, Joerg Roedel wrote: > > On Thu, Feb 21, 2019 at 03:15:30PM +0100, Greg Kroah-Hartman wrote: > > > Ugh, good catch! > > > > > > Any hint as to what type of testing that you did that caught this? I > > > keep asking people to run some kvm tests, but so far no one is :( > > > > We caught this at SUSE while testing candidate kernel updates for one of > > our service packs using a 4.4-based kernel and debugging turned > > out that this is issue came in via stable-updates. We also build a > > vanilla-flavour of the kernel which is nearly identical to the upstream > > stable tree, but what usually ends up in testing is the full tree with > > other backports. > > > > This particular issue was found by updating some openstack machines with > > the candidate kernel, which then triggered the problem in some guests. > > It is also a very special one, since I was only able to trigger the > > problem on Westmere-based machines with a specific guest-config. > > Nice work. Any chance that "test" could be added to the kvm testing > scripts that I think are being worked on somewhere? Ideally we would > have caught this before it ever hit the stable tree. If I understood correctly, the bug is specific to my backport. > Due to the lack of > good KVM testing, that's one of the areas I am always most worried about > :( Since the behaviour in this area depends on the host CPU model this might not help much. Ben. -- Ben Hutchings, Software Developer Codethink Ltd https://www.codethink.co.uk/ Dale House, 35 Dale Street Manchester, M1 2HF, United Kingdom ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH stable-4.4.y] KVM: VMX: Fix x2apic check in vmx_msr_bitmap_mode() 2019-02-21 16:20 ` Greg Kroah-Hartman 2019-02-21 17:00 ` Ben Hutchings @ 2019-02-21 17:15 ` Sean Christopherson 2019-02-22 9:20 ` Paolo Bonzini 1 sibling, 1 reply; 7+ messages in thread From: Sean Christopherson @ 2019-02-21 17:15 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Joerg Roedel, Joerg Roedel, stable, Ben Hutchings, David Woodhouse, Paolo Bonzini, Jim Mattson, linux-kernel On Thu, Feb 21, 2019 at 05:20:32PM +0100, Greg Kroah-Hartman wrote: > On Thu, Feb 21, 2019 at 03:47:01PM +0100, Joerg Roedel wrote: > > On Thu, Feb 21, 2019 at 03:15:30PM +0100, Greg Kroah-Hartman wrote: > > > Ugh, good catch! > > > > > > Any hint as to what type of testing that you did that caught this? I > > > keep asking people to run some kvm tests, but so far no one is :( > > > > We caught this at SUSE while testing candidate kernel updates for one of > > our service packs using a 4.4-based kernel and debugging turned > > out that this is issue came in via stable-updates. We also build a > > vanilla-flavour of the kernel which is nearly identical to the upstream > > stable tree, but what usually ends up in testing is the full tree with > > other backports. > > > > This particular issue was found by updating some openstack machines with > > the candidate kernel, which then triggered the problem in some guests. > > It is also a very special one, since I was only able to trigger the > > problem on Westmere-based machines with a specific guest-config. > > Nice work. Any chance that "test" could be added to the kvm testing > scripts that I think are being worked on somewhere? Ideally we would > have caught this before it ever hit the stable tree. Due to the lack of > good KVM testing, that's one of the areas I am always most worried about This bug exists only in the 4.4.y backport; upstream, 4.9.y and 4.14.y all had the correct code from the get-go. And there is already a KVM unit test that *should* hit this, albeit somewhat indirectly. I'll verify the tests that touch the TPR actually run with x2APIC enabled. Assuming the KVM unit test actually works, it's not a stretch for the bug to esacpe, e.g. if the tests weren't run on 4.4.y at all, or were only run on hardware with x2APIC. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH stable-4.4.y] KVM: VMX: Fix x2apic check in vmx_msr_bitmap_mode() 2019-02-21 17:15 ` Sean Christopherson @ 2019-02-22 9:20 ` Paolo Bonzini 0 siblings, 0 replies; 7+ messages in thread From: Paolo Bonzini @ 2019-02-22 9:20 UTC (permalink / raw) To: Sean Christopherson, Greg Kroah-Hartman Cc: Joerg Roedel, Joerg Roedel, stable, Ben Hutchings, David Woodhouse, Jim Mattson, linux-kernel On 21/02/19 18:15, Sean Christopherson wrote: > This bug exists only in the 4.4.y backport; upstream, 4.9.y and 4.14.y > all had the correct code from the get-go. And there is already a KVM > unit test that *should* hit this, albeit somewhat indirectly. I'll > verify the tests that touch the TPR actually run with x2APIC enabled. eventinj from kvm-unit-tests should trigger it. There are other tests that touch the TPR, but they use cr8 so they don't show the bug. > Assuming the KVM unit test actually works, it's not a stretch for the > bug to esacpe, e.g. if the tests weren't run on 4.4.y at all, or were > only run on hardware with x2APIC. Yeah, you should be able to see this with kvm_intel.enable_apicv=0 on newer processors. But I've never run the tests for 4.4.y. Paolo ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2019-02-22 9:21 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-02-21 13:52 [PATCH stable-4.4.y] KVM: VMX: Fix x2apic check in vmx_msr_bitmap_mode() Joerg Roedel 2019-02-21 14:15 ` Greg Kroah-Hartman 2019-02-21 14:47 ` Joerg Roedel 2019-02-21 16:20 ` Greg Kroah-Hartman 2019-02-21 17:00 ` Ben Hutchings 2019-02-21 17:15 ` Sean Christopherson 2019-02-22 9:20 ` Paolo Bonzini
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox