From patchwork Thu Jul 3 20:46:19 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yinghai Lu X-Patchwork-Id: 366993 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id D5111140132 for ; Fri, 4 Jul 2014 06:47:04 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753788AbaGCUrE (ORCPT ); Thu, 3 Jul 2014 16:47:04 -0400 Received: from aserp1040.oracle.com ([141.146.126.69]:32471 "EHLO aserp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753249AbaGCUrC (ORCPT ); Thu, 3 Jul 2014 16:47:02 -0400 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id s63KkvXC011249 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 3 Jul 2014 20:46:58 GMT Received: from userz7022.oracle.com (userz7022.oracle.com [156.151.31.86]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id s63Kku19022363 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 3 Jul 2014 20:46:57 GMT Received: from abhmp0020.oracle.com (abhmp0020.oracle.com [141.146.116.26]) by userz7022.oracle.com (8.14.5+Sun/8.14.4) with ESMTP id s63KkuBw010026; Thu, 3 Jul 2014 20:46:56 GMT Received: from linux-siqj.site (/10.132.126.31) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 03 Jul 2014 13:46:56 -0700 From: Yinghai Lu To: Bjorn Helgaas , Guo Chao Cc: linux-pci@vger.kernel.org, Yinghai Lu Subject: [PATCH v4 3/3] PCI: Avoid size overflow for bridge 32bit resource Date: Thu, 3 Jul 2014 13:46:19 -0700 Message-Id: <1404420379-20983-3-git-send-email-yinghai@kernel.org> X-Mailer: git-send-email 1.8.4.5 In-Reply-To: <1404420379-20983-1-git-send-email-yinghai@kernel.org> References: <1404420379-20983-1-git-send-email-yinghai@kernel.org> X-Source-IP: acsinet21.oracle.com [141.146.126.237] Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org When mmio64_mask is not used, overall size should not bigger than 2G for single bridge. Get out early, so we could have chance to have some child resources get assigned instead of failing all of them, as bridge resource assigned is too small when overflow happens. Signed-off-by: Yinghai Lu --- drivers/pci/setup-bus.c | 10 ++++++++++ 1 file changed, 10 insertions(+) -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Index: linux-2.6/drivers/pci/setup-bus.c =================================================================== --- linux-2.6.orig/drivers/pci/setup-bus.c +++ linux-2.6/drivers/pci/setup-bus.c @@ -957,6 +957,16 @@ static int pbus_size_mem(struct pci_bus (r->flags & mask) != type3)) continue; r_size = resource_size(r); + + /* reject oversize early */ + if (!mem64_mask && + ((unsigned long long)size + r_size > (1ULL<<31))) { + dev_warn(&dev->dev, "disabling BAR %d: %pR size %#llx overflow bridge's)\n", + i, r, (unsigned long long)size); + r->flags = 0; + continue; + } + #ifdef CONFIG_PCI_IOV /* put SRIOV requested res to the optional list */ if (realloc_head && i >= PCI_IOV_RESOURCES &&