From nobody Wed Feb 11 18:10:14 2026 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 0A68FC77B6F for ; Tue, 11 Apr 2023 08:34:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231133AbjDKIeb (ORCPT ); Tue, 11 Apr 2023 04:34:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54514 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230492AbjDKIe0 (ORCPT ); Tue, 11 Apr 2023 04:34:26 -0400 Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 618A210C2 for ; Tue, 11 Apr 2023 01:34:22 -0700 (PDT) Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-94a34a0baf9so174819566b.1 for ; Tue, 11 Apr 2023 01:34:22 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1681202061; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Y/F/1PUJwUX6hCcJ6JDKSJ9tj5PmDrf32kZ6wJpW/Zo=; b=cLX5Ci11ngysjh16qUj5iEyNUSKOuzyDt+2Cyax4nBu0gXPbsHNF5Q2TDlTgTWEGfE FnARH6bI4n2DvHbQAV5XB4MLOBst8VluQJCBViiRyDQxSqBs8kM24apxfJe06j/G1CIg 4r59jFT3cQTxx7MCCKhHpCUlhFvvsG2UuAbo2KVxlMW96x2BueQjHJZPY/2p4iy2L4sq q4cgxRFBZEiRV3krl78X1O3sGljz+VbHXbzr0W1DiKwohBt1cAmxc/xXvp5PSwCdQ1Jv hqKf7K8qQ3vIoZPAsSRmWSeaI8Ua1SXslfMDRIZXA9auCUlRAn0FH88OWVGiFFh4WceY BS4g== X-Gm-Message-State: AAQBX9fsiLdSZIObxqL6DeWESUvm5sU/e6abQ3INatuCF3Jw9WWSkZI5 9PCEA3xyWLvTDixfRU40GRs= X-Google-Smtp-Source: AKy350YCqBiHLbtRNZKN4SVJvgOQBXvbh1L7W3uUwxNGnzhOI4iNjG/whS6hXTRfrF/uNHfZXjzfXw== X-Received: by 2002:a05:6402:10c6:b0:504:b657:4cd8 with SMTP id p6-20020a05640210c600b00504b6574cd8mr3450298edu.31.1681202060806; Tue, 11 Apr 2023 01:34:20 -0700 (PDT) Received: from localhost.localdomain (aftr-82-135-86-174.dynamic.mnet-online.de. [82.135.86.174]) by smtp.googlemail.com with ESMTPSA id v13-20020a50954d000000b004fc649481basm5683178eda.58.2023.04.11.01.34.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Apr 2023 01:34:19 -0700 (PDT) From: Johannes Thumshirn To: Greg Kroah-Hartman Cc: JoseJavier.Rodriguez@duagon.com, Jorge.SanjuanGarcia@duagon.com, linux-kernel@vger.kernel.org, Jorge Sanjuan Garcia , Javier Rodriguez , Johannes Thumshirn Subject: [PATCH 1/3] mcb: Return actual parsed size when reading chameleon table Date: Tue, 11 Apr 2023 10:33:27 +0200 Message-Id: <20230411083329.4506-2-jth@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230411083329.4506-1-jth@kernel.org> References: <20230411083329.4506-1-jth@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Rodr=C3=ADguez Barbarin, Jos=C3=A9 Javier The function chameleon_parse_cells() returns the number of cells parsed which has an undetermined size. This return value is only used for error checking but the number of cells is never used. Change return value to be number of bytes parsed to allow for memory management improvements. Co-developed-by: Jorge Sanjuan Garcia Signed-off-by: Jorge Sanjuan Garcia Signed-off-by: Javier Rodriguez Signed-off-by: Johannes Thumshirn --- drivers/mcb/mcb-parse.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/mcb/mcb-parse.c b/drivers/mcb/mcb-parse.c index aa6938da0db8..2aef990f379f 100644 --- a/drivers/mcb/mcb-parse.c +++ b/drivers/mcb/mcb-parse.c @@ -130,7 +130,7 @@ static void chameleon_parse_bar(void __iomem *base, } } =20 -static int chameleon_get_bar(char __iomem **base, phys_addr_t mapbase, +static int chameleon_get_bar(void __iomem **base, phys_addr_t mapbase, struct chameleon_bar **cb) { struct chameleon_bar *c; @@ -179,12 +179,13 @@ int chameleon_parse_cells(struct mcb_bus *bus, phys_a= ddr_t mapbase, { struct chameleon_fpga_header *header; struct chameleon_bar *cb; - char __iomem *p =3D base; + void __iomem *p =3D base; int num_cells =3D 0; uint32_t dtype; int bar_count; int ret; u32 hsize; + u32 table_size; =20 hsize =3D sizeof(struct chameleon_fpga_header); =20 @@ -239,12 +240,16 @@ int chameleon_parse_cells(struct mcb_bus *bus, phys_a= ddr_t mapbase, num_cells++; } =20 - if (num_cells =3D=3D 0) - num_cells =3D -EINVAL; + if (num_cells =3D=3D 0) { + ret =3D -EINVAL; + goto free_bar; + } =20 + table_size =3D p - base; + pr_debug("%d cell(s) found. Chameleon table size: 0x%04x bytes\n", num_ce= lls, table_size); kfree(cb); kfree(header); - return num_cells; + return table_size; =20 free_bar: kfree(cb); --=20 2.39.2 From nobody Wed Feb 11 18:10:14 2026 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 DC511C7619A for ; Tue, 11 Apr 2023 08:34:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231146AbjDKIed (ORCPT ); Tue, 11 Apr 2023 04:34:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54564 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230509AbjDKIe1 (ORCPT ); Tue, 11 Apr 2023 04:34:27 -0400 Received: from mail-ed1-f46.google.com (mail-ed1-f46.google.com [209.85.208.46]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 06E2A1701 for ; Tue, 11 Apr 2023 01:34:24 -0700 (PDT) Received: by mail-ed1-f46.google.com with SMTP id 4fb4d7f45d1cf-5047074939fso15379140a12.1 for ; Tue, 11 Apr 2023 01:34:23 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1681202062; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hkdKJwaH8L7z7o46mK/fJ3bKpTFQDoczm/fDDv32BWM=; b=kDBjzCWlO8C/XcnyEYsdgK0t/5VFh2Jgaq7UjvB+Xfq71ZcADJM3snbi7bu4zLuhh0 SCYRWfkQyPCHe36Ts6WuQ7CFIxVT4ZSePqlnJy8AwD8VRubFmUqpazdmYaoi/N53oKUT jFbb4AL3frmxa0oqvR6GeyDPaDnqUCvSO3WgH342IfJD0fsvM5Dc7eBEhwF2th/5/9e2 dV1oXx4Av2sVJx6i0rPkJnqYGcUdrdGpZeY7VP0x3/0WXjrdywtOulpwb1q8OVFN8gys vROsYOJAbTSxreAxh7V+Rbgf7iBdIWyVcpjJXhalvynci8gDB2iL1vM18W77wpmFaAdr XWCg== X-Gm-Message-State: AAQBX9fF17N53lJl6NkpCk6hgl9gzJF/dvtFAf5n7H2r4MJf1RFCuTmo a+HrtM7o8HHNBWoBsG/+RmY= X-Google-Smtp-Source: AKy350a3//WZrCCXvKNWsS/l73pBPtH0fMz+KS0kn1G20uavjz8H39WJ8vw08lpH+26XzsMlJGi2WA== X-Received: by 2002:a05:6402:42d4:b0:502:1d1b:5bef with SMTP id i20-20020a05640242d400b005021d1b5befmr18383779edc.14.1681202062528; Tue, 11 Apr 2023 01:34:22 -0700 (PDT) Received: from localhost.localdomain (aftr-82-135-86-174.dynamic.mnet-online.de. [82.135.86.174]) by smtp.googlemail.com with ESMTPSA id v13-20020a50954d000000b004fc649481basm5683178eda.58.2023.04.11.01.34.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Apr 2023 01:34:21 -0700 (PDT) From: Johannes Thumshirn To: Greg Kroah-Hartman Cc: JoseJavier.Rodriguez@duagon.com, Jorge.SanjuanGarcia@duagon.com, linux-kernel@vger.kernel.org, Jorge Sanjuan Garcia , Javier Rodriguez , Johannes Thumshirn Subject: [PATCH 2/3] mcb-pci: Reallocate memory region to avoid memory overlapping Date: Tue, 11 Apr 2023 10:33:28 +0200 Message-Id: <20230411083329.4506-3-jth@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230411083329.4506-1-jth@kernel.org> References: <20230411083329.4506-1-jth@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Rodr=C3=ADguez Barbarin, Jos=C3=A9 Javier 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 --- 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 dc88232d9af8..53d9202ff9a7 100644 --- a/drivers/mcb/mcb-pci.c +++ b/drivers/mcb/mcb-pci.c @@ -31,7 +31,7 @@ static int mcb_pci_probe(struct pci_dev *pdev, const stru= ct pci_device_id *id) { struct resource *res; struct priv *priv; - int ret; + int ret, table_size; unsigned long flags; =20 priv =3D devm_kzalloc(&pdev->dev, sizeof(struct priv), GFP_KERNEL); @@ -90,7 +90,30 @@ static int mcb_pci_probe(struct pci_dev *pdev, const str= uct pci_device_id *id) if (ret < 0) goto out_mcb_bus; =20 - dev_dbg(&pdev->dev, "Found %d cells\n", ret); + table_size =3D 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 =3D 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 =3D -EBUSY; + goto out_mcb_bus; + } + + priv->base =3D devm_ioremap(&pdev->dev, priv->mapbase, table_size); + if (!priv->base) { + dev_err(&pdev->dev, "Cannot ioremap\n"); + ret =3D -ENOMEM; + goto out_mcb_bus; + } + } =20 mcb_bus_add_devices(priv->bus); =20 --=20 2.39.2 From nobody Wed Feb 11 18:10:14 2026 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 F2DA2C7619A for ; Tue, 11 Apr 2023 08:34:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231156AbjDKIeg (ORCPT ); Tue, 11 Apr 2023 04:34:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54482 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230448AbjDKIe2 (ORCPT ); Tue, 11 Apr 2023 04:34:28 -0400 Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com [209.85.208.53]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D3C082D5A for ; Tue, 11 Apr 2023 01:34:25 -0700 (PDT) Received: by mail-ed1-f53.google.com with SMTP id 4fb4d7f45d1cf-50489c6171dso2005129a12.3 for ; Tue, 11 Apr 2023 01:34:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1681202064; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FIQy0z8jTVH7zpmG87sxcsYghwyL6FkUSdX2CbnH7m8=; b=DuHQvrn/8Nf7AGWkzoPpopKmBeR2a55nT6ZfggsT2qQtV48yy/cy9SxnYQzW2ib8bO l+Zo5ErASoESd8miPWGvAGnHoU9bryee0XJBjbAK7z4QKQkYO4jLjeEBOnmBrLbK8kJ+ vv2dQHMgucuaT+mXJWANkANvPStSVGQeKml4jhSTHXFfTitCk5Z3kGsAsMkvpXn8mo5S ErPoKIUDsRKUucMhsTkfFrH5CWzeWicgIXwaGrofpQoi80gKqO8rNc18QNmUgOSMgQE3 kZ+dIGQMjCuI44Vj8mqxq4PK1IQsKN3F74PFsuJBqtnEyQ+pZIWBTgXlPFEXYJzAqJyZ BEWQ== X-Gm-Message-State: AAQBX9d5QemXmzOLGIIew7aAiH7tfqXEAIpmWJBfg/5JJEjNxCWCJOJb GH+IX8KGipFO+ZMZDFI+cp4= X-Google-Smtp-Source: AKy350abpQBdo14BHKyD1DlIP4kfKIBceIoChFJi8UO9MpvMFnw1yvMf7PbQU/JZNN6j9mYiJ9SMeA== X-Received: by 2002:aa7:de13:0:b0:502:a700:dc8b with SMTP id h19-20020aa7de13000000b00502a700dc8bmr8410709edv.9.1681202064337; Tue, 11 Apr 2023 01:34:24 -0700 (PDT) Received: from localhost.localdomain (aftr-82-135-86-174.dynamic.mnet-online.de. [82.135.86.174]) by smtp.googlemail.com with ESMTPSA id v13-20020a50954d000000b004fc649481basm5683178eda.58.2023.04.11.01.34.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Apr 2023 01:34:23 -0700 (PDT) From: Johannes Thumshirn To: Greg Kroah-Hartman Cc: JoseJavier.Rodriguez@duagon.com, Jorge.SanjuanGarcia@duagon.com, linux-kernel@vger.kernel.org, Jorge Sanjuan Garcia , Javier Rodriguez , Johannes Thumshirn Subject: [PATCH 3/3] mcb-lpc: Reallocate memory region to avoid memory overlapping Date: Tue, 11 Apr 2023 10:33:29 +0200 Message-Id: <20230411083329.4506-4-jth@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230411083329.4506-1-jth@kernel.org> References: <20230411083329.4506-1-jth@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Rodr=C3=ADguez Barbarin, Jos=C3=A9 Javier mcb-lpc 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 --- drivers/mcb/mcb-lpc.c | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/drivers/mcb/mcb-lpc.c b/drivers/mcb/mcb-lpc.c index 53decd89876e..a851e0236464 100644 --- a/drivers/mcb/mcb-lpc.c +++ b/drivers/mcb/mcb-lpc.c @@ -23,7 +23,7 @@ static int mcb_lpc_probe(struct platform_device *pdev) { struct resource *res; struct priv *priv; - int ret =3D 0; + int ret =3D 0, table_size; =20 priv =3D devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); if (!priv) @@ -58,16 +58,43 @@ static int mcb_lpc_probe(struct platform_device *pdev) =20 ret =3D chameleon_parse_cells(priv->bus, priv->mem->start, priv->base); if (ret < 0) { - mcb_release_bus(priv->bus); - return ret; + goto out_mcb_bus; } =20 - dev_dbg(&pdev->dev, "Found %d cells\n", ret); + table_size =3D ret; + + if (table_size < CHAM_HEADER_SIZE) { + /* Release the previous resources */ + devm_iounmap(&pdev->dev, priv->base); + devm_release_mem_region(&pdev->dev, priv->mem->start, resource_size(priv= ->mem)); + + /* Then, allocate it again with the actual chameleon table size */ + res =3D devm_request_mem_region(&pdev->dev, priv->mem->start, + table_size, + KBUILD_MODNAME); + if (!res) { + dev_err(&pdev->dev, "Failed to request PCI memory\n"); + ret =3D -EBUSY; + goto out_mcb_bus; + } + + priv->base =3D devm_ioremap(&pdev->dev, priv->mem->start, table_size); + if (!priv->base) { + dev_err(&pdev->dev, "Cannot ioremap\n"); + ret =3D -ENOMEM; + goto out_mcb_bus; + } + + platform_set_drvdata(pdev, priv); + } =20 mcb_bus_add_devices(priv->bus); =20 return 0; =20 +out_mcb_bus: + mcb_release_bus(priv->bus); + return ret; } =20 static int mcb_lpc_remove(struct platform_device *pdev) --=20 2.39.2