From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5367EC77B7F for ; Sun, 7 May 2023 00:56:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232880AbjEGAzw (ORCPT ); Sat, 6 May 2023 20:55:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57394 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231286AbjEGAz0 (ORCPT ); Sat, 6 May 2023 20:55:26 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1EDD723A3F; Sat, 6 May 2023 17:54:04 -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 3937961514; Sun, 7 May 2023 00:37:25 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B3E15C4339E; Sun, 7 May 2023 00:37:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1683419844; bh=BTuyMiPP+Z5fEgCMkZiuq7KWbXYYMtTR0aUw4/clvtw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tLlpGCXWiSO4K7JW6Z4Pa8KiSKb+iykmhCpDHAEpn3F5DJj3Jb8KA1KgTdEFO3TdG bi0G0KAbj3pIl2p1RAZhG/72U2nJw9h3Qi31S3G7od2ucJqJIefxF2v5nFIjHdZpNA ZhoK7dLURgR80A4omkpJrxHoyWTkKgKOD3LAt0wKwlkNJ9/P6hz/mKwc+pCSy5EuVK tpOJedPEqcMJEVwHMKMSBHtrV3kFA7ablPnw+TJyt/7eE4L7L88Sahsf/hTt9VtnxR d6zi0muMlZ/+1et78Q1wFH0gfJKt9eXPYdqesIXAhbqUn6GuDB2DI3IeEDpYlYdOVb O+hEd/cNZLbbQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: =?UTF-8?q?Rodr=C3=ADguez=20Barbarin=2C=20Jos=C3=A9=20Javier?= , Jorge Sanjuan Garcia , Javier Rodriguez , Johannes Thumshirn , Greg Kroah-Hartman , Sasha Levin , morbidrsa@gmail.com Subject: [PATCH AUTOSEL 4.14 8/8] mcb-pci: Reallocate memory region to avoid memory overlapping Date: Sat, 6 May 2023 20:37:03 -0400 Message-Id: <20230507003704.4081392-8-sashal@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230507003704.4081392-1-sashal@kernel.org> References: <20230507003704.4081392-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Rodríguez Barbarin, José Javier [ Upstream commit 9be24faadd085c284890c3afcec7a0184642315a ] mcb-pci requests a fixed-size memory region to parse the chameleon table, however, if the chameleon table is smaller that the allocated region, it could overlap with the IP Cores' memory regions. After parsing the chameleon table, drop/reallocate the memory region with the actual chameleon table size. Co-developed-by: Jorge Sanjuan Garcia Signed-off-by: Jorge Sanjuan Garcia Signed-off-by: Javier Rodriguez Signed-off-by: Johannes Thumshirn Link: https://lore.kernel.org/r/20230411083329.4506-3-jth@kernel.org Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/mcb/mcb-pci.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/drivers/mcb/mcb-pci.c b/drivers/mcb/mcb-pci.c index af4d2f26f1c62..b0ec3bbf1b76d 100644 --- a/drivers/mcb/mcb-pci.c +++ b/drivers/mcb/mcb-pci.c @@ -34,7 +34,7 @@ static int mcb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { struct resource *res; struct priv *priv; - int ret; + int ret, table_size; unsigned long flags; priv = devm_kzalloc(&pdev->dev, sizeof(struct priv), GFP_KERNEL); @@ -93,7 +93,30 @@ static int mcb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) if (ret < 0) goto out_mcb_bus; - dev_dbg(&pdev->dev, "Found %d cells\n", ret); + table_size = ret; + + if (table_size < CHAM_HEADER_SIZE) { + /* Release the previous resources */ + devm_iounmap(&pdev->dev, priv->base); + devm_release_mem_region(&pdev->dev, priv->mapbase, CHAM_HEADER_SIZE); + + /* Then, allocate it again with the actual chameleon table size */ + res = devm_request_mem_region(&pdev->dev, priv->mapbase, + table_size, + KBUILD_MODNAME); + if (!res) { + dev_err(&pdev->dev, "Failed to request PCI memory\n"); + ret = -EBUSY; + goto out_mcb_bus; + } + + priv->base = devm_ioremap(&pdev->dev, priv->mapbase, table_size); + if (!priv->base) { + dev_err(&pdev->dev, "Cannot ioremap\n"); + ret = -ENOMEM; + goto out_mcb_bus; + } + } mcb_bus_add_devices(priv->bus); -- 2.39.2