From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935082AbdACNGu (ORCPT ); Tue, 3 Jan 2017 08:06:50 -0500 Received: from mx1.redhat.com ([209.132.183.28]:39804 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934723AbdACNGi (ORCPT ); Tue, 3 Jan 2017 08:06:38 -0500 Subject: Re: [PATCH v2 5/6] KVM: x86: prevent setup of invalid routes To: =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , linux-kernel@vger.kernel.org, kvm@vger.kernel.org References: <20161216151006.11776-1-rkrcmar@redhat.com> <20161216151006.11776-6-rkrcmar@redhat.com> Cc: Paolo Bonzini From: David Hildenbrand Organization: Red Hat GmbH Message-ID: <461963f5-fddf-5b98-da01-0adb12212029@redhat.com> Date: Tue, 3 Jan 2017 14:06:34 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 MIME-Version: 1.0 In-Reply-To: <20161216151006.11776-6-rkrcmar@redhat.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Tue, 03 Jan 2017 13:06:38 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Am 16.12.2016 um 16:10 schrieb Radim Krčmář: > The check in kvm_set_pic_irq() and kvm_set_ioapic_irq() was just a > temporary measure until the code improved enough for us to do this. > > This changes APIC in a case when KVM_SET_GSI_ROUTING is called to set up pic > and ioapic routes before KVM_CREATE_IRQCHIP. Those rules would get overwritten > by KVM_CREATE_IRQCHIP at best, so it is pointless to allow it. Userspaces > hopefully noticed that things don't work if they do that and don't do that. > > Reviewed-by: Paolo Bonzini > Signed-off-by: Radim Krčmář > --- > v2: r-b Paolo > --- > arch/x86/kvm/irq_comm.c | 19 ++++++------------- > 1 file changed, 6 insertions(+), 13 deletions(-) > > diff --git a/arch/x86/kvm/irq_comm.c b/arch/x86/kvm/irq_comm.c > index 1dfeb185a1e3..2639b8d3dce2 100644 > --- a/arch/x86/kvm/irq_comm.c > +++ b/arch/x86/kvm/irq_comm.c > @@ -41,15 +41,6 @@ static int kvm_set_pic_irq(struct kvm_kernel_irq_routing_entry *e, > bool line_status) > { > struct kvm_pic *pic = pic_irqchip(kvm); > - > - /* > - * XXX: rejecting pic routes when pic isn't in use would be better, > - * but the default routing table is installed while kvm->arch.vpic is > - * NULL and KVM_CREATE_IRQCHIP can race with KVM_IRQ_LINE. > - */ > - if (!pic) > - return -1; > - > return kvm_pic_set_irq(pic, e->irqchip.pin, irq_source_id, level); > } > > @@ -58,10 +49,6 @@ static int kvm_set_ioapic_irq(struct kvm_kernel_irq_routing_entry *e, > bool line_status) > { > struct kvm_ioapic *ioapic = kvm->arch.vioapic; > - > - if (!ioapic) > - return -1; > - > return kvm_ioapic_set_irq(ioapic, e->irqchip.pin, irq_source_id, level, > line_status); > } > @@ -301,10 +288,16 @@ int kvm_set_routing_entry(struct kvm *kvm, > delta = 8; > /* fall through */ > case KVM_IRQCHIP_PIC_MASTER: > + if (!pic_in_kernel(kvm)) > + goto out; > + > e->set = kvm_set_pic_irq; > max_pin = PIC_NUM_PINS; > break; > case KVM_IRQCHIP_IOAPIC: > + if (!ioapic_in_kernel(kvm)) > + goto out; > + > max_pin = KVM_IOAPIC_NUM_PINS; > e->set = kvm_set_ioapic_irq; > break; > Reviewed-by: David Hildenbrand -- David