From patchwork Wed Aug 5 10:53:57 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Fedin X-Patchwork-Id: 6948181 Return-Path: X-Original-To: patchwork-kvm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 8C8FDC05AE for ; Wed, 5 Aug 2015 10:54:22 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id B15B920425 for ; Wed, 5 Aug 2015 10:54:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A352D20435 for ; Wed, 5 Aug 2015 10:54:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752608AbbHEKyN (ORCPT ); Wed, 5 Aug 2015 06:54:13 -0400 Received: from mailout1.w1.samsung.com ([210.118.77.11]:51906 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752524AbbHEKyK (ORCPT ); Wed, 5 Aug 2015 06:54:10 -0400 Received: from eucpsbgm1.samsung.com (unknown [203.254.199.244]) by mailout1.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0NSL002X7VM8A910@mailout1.w1.samsung.com> for kvm@vger.kernel.org; Wed, 05 Aug 2015 11:54:08 +0100 (BST) X-AuditID: cbfec7f4-f79c56d0000012ee-59-55c1eb4fc78e Received: from eusync4.samsung.com ( [203.254.199.214]) by eucpsbgm1.samsung.com (EUCPMTA) with SMTP id 85.15.04846.F4BE1C55; Wed, 5 Aug 2015 11:54:07 +0100 (BST) Received: from fedinw7x64.rnd.samsung.ru ([106.109.131.169]) by eusync4.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0NSL00MNOVLZXU10@eusync4.samsung.com>; Wed, 05 Aug 2015 11:54:07 +0100 (BST) From: Pavel Fedin To: kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org Cc: Christoffer Dall , Marc Zyngier Subject: [PATCH v3 1/3] Fix NULL pointer dereference if KVM is used without in-kernel irqchip Date: Wed, 05 Aug 2015 13:53:57 +0300 Message-id: <34464c9cb7c603a22bb6849b78575ee286368936.1438770954.git.p.fedin@samsung.com> X-Mailer: git-send-email 2.4.4 In-reply-to: References: In-reply-to: References: X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprGLMWRmVeSWpSXmKPExsVy+t/xa7r+rw+GGqzdZW3x4vU/Ros5Uwst Pp46zm7x984/NgcWjzXz1jB63Lm2h83j/KY1zB6fN8kFsERx2aSk5mSWpRbp2yVwZSxe9Z6p 4CpHxeLFc1kaGOeydzFyckgImEicuTGBBcIWk7hwbz1bFyMXh5DAUkaJX8eWMUE4bUwSvy9c ZgapYhNQlzj99QNYh4iAqcTzf29Zuxg5OJgFIiWez2AFCQsLxEs82LyMEcRmEVCVONx9lgnE 5hWIlniw9yYbxDI5iSvXp4PZnALmEme+nQSzhQTMJJa/W8eOS3wCI/8CRoZVjKKppckFxUnp uYZ6xYm5xaV56XrJ+bmbGCGh9WUH4+JjVocYBTgYlXh4PzgfDBViTSwrrsw9xCjBwawkwpux HSjEm5JYWZValB9fVJqTWnyIUZqDRUmcd+6u9yFCAumJJanZqakFqUUwWSYOTqkGRss5C5LV s/2j7ZeZCwhUVYe6CdY6ZHj0HCj8dC825fDhd7ZBa8UKGnm5IiV5ns5Yphw7Za2qVgirZyRj UpqH6mPDzSqhTl+OiWqYWoafE9txhnumSOeRR8uuq6gs5XFt1Wv4y9/57Mp79umPD6RM6PGa MDvRt00+/c7ER/knuw/VLjR100pUYinOSDTUYi4qTgQAO5JKICkCAAA= Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Makes qemu working again with kernel-irqchip=off option, allowing to use GIC emulation in userspace. Previously kvm_vgic_map_resources() used to include irqchip_in_kernel() check, and vgic_v2_map_resources() still has it, but now vm_ops are not initialized before kvm_vgic_create(). Therefore kvm_vgic_map_resources() call without vGIC instantiation attempts to call vm_ops.map_resources == NULL The bug was introduced in b26e5fdac43c1b7c394502917e42e3b91f3aa1a3 Signed-off-by: Pavel Fedin --- arch/arm/kvm/arm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c index 483b5d1..199a50a 100644 --- a/arch/arm/kvm/arm.c +++ b/arch/arm/kvm/arm.c @@ -449,7 +449,7 @@ static int kvm_vcpu_first_run_init(struct kvm_vcpu *vcpu) * Map the VGIC hardware resources before running a vcpu the first * time on this VM. */ - if (unlikely(!vgic_ready(kvm))) { + if (unlikely(irqchip_in_kernel(kvm) && !vgic_ready(kvm))) { ret = kvm_vgic_map_resources(kvm); if (ret) return ret;