From patchwork Thu May 12 06:56:58 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Engraf X-Patchwork-Id: 9076821 X-Patchwork-Delegate: bhelgaas@google.com Return-Path: X-Original-To: patchwork-linux-pci@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id E819D9F1C3 for ; Thu, 12 May 2016 06:57:06 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 084B6201ED for ; Thu, 12 May 2016 06:57:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 13B60201D3 for ; Thu, 12 May 2016 06:57:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752084AbcELG5B (ORCPT ); Thu, 12 May 2016 02:57:01 -0400 Received: from mail.sysgo.com ([176.9.12.79]:58654 "EHLO mail.sysgo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751963AbcELG5B (ORCPT ); Thu, 12 May 2016 02:57:01 -0400 From: David Engraf Subject: [PATCH] PCI: Fix __pci_bus_size_bridges when bridge is not available To: Bjorn Helgaas Cc: Bjorn Helgaas , Wei Yang , linux-pci@vger.kernel.org Message-ID: <5734293A.6040702@sysgo.com> Date: Thu, 12 May 2016 08:56:58 +0200 MIME-Version: 1.0 Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org X-Spam-Status: No, score=-8.3 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_TVD_MIME_EPI, 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 A virtual PCI controller may not have a bridge device, thus when __pci_bus_size_bridges is called, it will generate a NULL pointer exception when accessing bus->self->class. The attached patch adds a check to verify if a bridge has been set. Without a bridge device, the function returns. Signed-off-by: David Engraf sysgo.com> diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c index 55641a3..ddb3381 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c @@ -1245,6 +1245,10 @@ void __pci_bus_size_bridges(struct pci_bus *bus, struct list_head *realloc_head) if (pci_is_root_bus(bus)) return; + /* bridge device available? */ + if (!bus->self) + return; + switch (bus->self->class >> 8) { case PCI_CLASS_BRIDGE_CARDBUS: /* don't size cardbuses yet. */