Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp974321pxb; Wed, 6 Apr 2022 05:46:48 -0700 (PDT) X-Google-Smtp-Source: ABdhPJze9rvv9xIIDWmuTU8g7LC69lX3Q8bcP4+3rTaVORxOzC4cZqWVEQkTOZWRjPF1hKSBW9y2 X-Received: by 2002:a17:903:186:b0:154:3606:7a73 with SMTP id z6-20020a170903018600b0015436067a73mr8480002plg.89.1649249208250; Wed, 06 Apr 2022 05:46:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649249208; cv=none; d=google.com; s=arc-20160816; b=viCiAzZYnCoc4gi4eftGJ0vmdTwpEeBfQGQPt9POnTXd0vFnxm5Qr9IDWA9hwoBbPf PtZ98bO0EB+nHa5LtI6bLMCszwuzpj/CqX3ELfWq53OcBYvydikwU/aGzmVS7m5vL+3d EOLIa7hbwXZM8NjP53Zss/4djgi5Zbyn+QptpaLhk5GU4pBjILheEqont7E2sJBOa0RW 9vxZwHyKna/CYB/38InxHp1UCUWsyS4G8Feq/+p7Rsb6Rqnfu5pJ0qEtUe5SVYgV9emI MWBuDY002tjIfl/Pzzp56VuEhpjprhRmW2Vm3+idTVVzgB8t4zsjrx5OBe0l9vPgra8u 0ANA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=wU9ZMdR3/Vyd7KyIj1hL75C8TKyBYBOb0wWGk0MqzIE=; b=ZHGl6P24tWLxk1IsKqwBSljMYwMsfGZrQHgm8nJ5cRJMmQQriPvqv9zIFbyTMdsLP4 6QHcyTnUBySvyX461XxGSkojODEgk4uaKBWlL9wYuGG5hfG2lFcKdxeSLukUYI8ETnqJ UnN0eKjPsMG3373Fii1EijMqUdJ8OaeiYu+qTmcxLznixrIUSXam8zy7NA6/gnOw9jiW rcbWQiu0HpfZGu531i3KLsfCyo5HNZV1zcBiCL/aezm+SnQplZeUJXEDy5LSwXaFsRCc E98hPbNgCMexALx5E1QmnaJAU/clvn1wSjz+HGNro3mGoqoOAB2z7zEPVZMgFVqWFa3c W3wA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=vNP9VRhq; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id t2-20020a17090340c200b00153b2d16619si14144412pld.545.2022.04.06.05.46.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Apr 2022 05:46:48 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=vNP9VRhq; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 58AC3411F38; Wed, 6 Apr 2022 02:30:18 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346881AbiDEVNr (ORCPT + 99 others); Tue, 5 Apr 2022 17:13:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34642 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344436AbiDEKjs (ORCPT ); Tue, 5 Apr 2022 06:39:48 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4D15C2C134; Tue, 5 Apr 2022 03:25:15 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id DD2CD61425; Tue, 5 Apr 2022 10:25:14 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id F11E7C385A0; Tue, 5 Apr 2022 10:25:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1649154314; bh=gRnMlmx6r/8NZsAVZSL3Ria0o4HVNfD/JXBbKnT2T6Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vNP9VRhqMuRs77LStA47LV2fuIjVr4fWBvSlPBgs17Uc49JYw9Y0iXYC8r6nJGXEH JgDSfAbMoxoC6elQaquWdWi1c2NWyspZm5GQsMKAJsocbpjegRtNACJQS5/a8q+sEy eUhohR4/pTZ2pWkRpAmiERd03o4c5f1IxgnXemK4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Yi Liu , Yi Wang , Paolo Bonzini Subject: [PATCH 5.10 536/599] KVM: SVM: fix panic on out-of-bounds guest IRQ Date: Tue, 5 Apr 2022 09:33:50 +0200 Message-Id: <20220405070314.791292621@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220405070258.802373272@linuxfoundation.org> References: <20220405070258.802373272@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Yi Wang commit a80ced6ea514000d34bf1239d47553de0d1ee89e upstream. As guest_irq is coming from KVM_IRQFD API call, it may trigger crash in svm_update_pi_irte() due to out-of-bounds: crash> bt PID: 22218 TASK: ffff951a6ad74980 CPU: 73 COMMAND: "vcpu8" #0 [ffffb1ba6707fa40] machine_kexec at ffffffff8565b397 #1 [ffffb1ba6707fa90] __crash_kexec at ffffffff85788a6d #2 [ffffb1ba6707fb58] crash_kexec at ffffffff8578995d #3 [ffffb1ba6707fb70] oops_end at ffffffff85623c0d #4 [ffffb1ba6707fb90] no_context at ffffffff856692c9 #5 [ffffb1ba6707fbf8] exc_page_fault at ffffffff85f95b51 #6 [ffffb1ba6707fc50] asm_exc_page_fault at ffffffff86000ace [exception RIP: svm_update_pi_irte+227] RIP: ffffffffc0761b53 RSP: ffffb1ba6707fd08 RFLAGS: 00010086 RAX: ffffb1ba6707fd78 RBX: ffffb1ba66d91000 RCX: 0000000000000001 RDX: 00003c803f63f1c0 RSI: 000000000000019a RDI: ffffb1ba66db2ab8 RBP: 000000000000019a R8: 0000000000000040 R9: ffff94ca41b82200 R10: ffffffffffffffcf R11: 0000000000000001 R12: 0000000000000001 R13: 0000000000000001 R14: ffffffffffffffcf R15: 000000000000005f ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018 #7 [ffffb1ba6707fdb8] kvm_irq_routing_update at ffffffffc09f19a1 [kvm] #8 [ffffb1ba6707fde0] kvm_set_irq_routing at ffffffffc09f2133 [kvm] #9 [ffffb1ba6707fe18] kvm_vm_ioctl at ffffffffc09ef544 [kvm] RIP: 00007f143c36488b RSP: 00007f143a4e04b8 RFLAGS: 00000246 RAX: ffffffffffffffda RBX: 00007f05780041d0 RCX: 00007f143c36488b RDX: 00007f05780041d0 RSI: 000000004008ae6a RDI: 0000000000000020 RBP: 00000000000004e8 R8: 0000000000000008 R9: 00007f05780041e0 R10: 00007f0578004560 R11: 0000000000000246 R12: 00000000000004e0 R13: 000000000000001a R14: 00007f1424001c60 R15: 00007f0578003bc0 ORIG_RAX: 0000000000000010 CS: 0033 SS: 002b Vmx have been fix this in commit 3a8b0677fc61 (KVM: VMX: Do not BUG() on out-of-bounds guest IRQ), so we can just copy source from that to fix this. Co-developed-by: Yi Liu Signed-off-by: Yi Liu Signed-off-by: Yi Wang Message-Id: <20220309113025.44469-1-wang.yi59@zte.com.cn> Cc: stable@vger.kernel.org Signed-off-by: Paolo Bonzini Signed-off-by: Greg Kroah-Hartman --- arch/x86/kvm/svm/avic.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) --- a/arch/x86/kvm/svm/avic.c +++ b/arch/x86/kvm/svm/avic.c @@ -806,7 +806,7 @@ int svm_update_pi_irte(struct kvm *kvm, { struct kvm_kernel_irq_routing_entry *e; struct kvm_irq_routing_table *irq_rt; - int idx, ret = -EINVAL; + int idx, ret = 0; if (!kvm_arch_has_assigned_device(kvm) || !irq_remapping_cap(IRQ_POSTING_CAP)) @@ -817,7 +817,13 @@ int svm_update_pi_irte(struct kvm *kvm, idx = srcu_read_lock(&kvm->irq_srcu); irq_rt = srcu_dereference(kvm->irq_routing, &kvm->irq_srcu); - WARN_ON(guest_irq >= irq_rt->nr_rt_entries); + + if (guest_irq >= irq_rt->nr_rt_entries || + hlist_empty(&irq_rt->map[guest_irq])) { + pr_warn_once("no route for guest_irq %u/%u (broken user space?)\n", + guest_irq, irq_rt->nr_rt_entries); + goto out; + } hlist_for_each_entry(e, &irq_rt->map[guest_irq], link) { struct vcpu_data vcpu_info;