[{"id":3682495,"web_url":"http://patchwork.ozlabs.org/comment/3682495/","msgid":"<2a79933e-9051-4d5d-a95e-c4bfc2c2c932@kernel.org>","list_archive_url":null,"date":"2026-04-27T05:44:46","subject":"Re: [PATCH v3] ata: ahci: fail probe if BAR too small for claimed\n ports","submitter":{"id":86188,"url":"http://patchwork.ozlabs.org/api/people/86188/","name":"Damien Le Moal","email":"dlemoal@kernel.org"},"content":"On 4/27/26 2:37 PM, dayou5941@163.com wrote:\n> From: liyouhong <liyouhong@kylinos.cn>\n> \n> When an AHCI controller is disabled in BIOS, its HOST_CAP register may\n> contain invalid values (e.g., 0xFFFFFFFF) indicating an impossibly large\n> number of ports. If CAP.NP claims more ports than can physically fit\n> within the mapped BAR region, accessing port registers beyond the BAR\n> boundary causes a kernel panic.\n> \n> Add validation in ahci_init_one() to check that the BAR size is\n> sufficient for the number of ports claimed in CAP.NP. The check\n> calculates the required MMIO size as:\n> \n>   required_size = 0x100 (global registers) + max_ports * 0x80\n> \n> If required_size exceeds the actual BAR size, the probe fails with\n> -ENODEV, preventing the panic and providing a clear error message.\n> \n> This solution follows the suggestion by Damien Le Moal and Niklas Cassel\n> to detect and reject obviously broken controller configurations early.\n> \n> Reported-by: liyouhong <liyouhong@kylinos.cn>\n> Suggested-by: Damien Le Moal <dlemoal@kernel.org>\n> Suggested-by: Niklas Cassel <cassel@kernel.org>\n> Signed-off-by: liyouhong <liyouhong@kylinos.cn>\n> ---\n> v3:\n> - Fix patch format: add \"---\" separator and move changelog to correct location\n> - Change dev_err to dev_warn as suggested\n\nNote for next time: please keep *all* versions notes in the changelog. Do not\nkeep only the description for the last changes.\n\n> \n> ---\n>  drivers/ata/ahci.c | 21 +++++++++++++++++++++\n>  1 file changed, 21 insertions(+)\n> \n> diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c\n> index 1d73a53370cf..e5eff7e3d66b 100644\n> --- a/drivers/ata/ahci.c\n> +++ b/drivers/ata/ahci.c\n> @@ -1888,6 +1888,23 @@ static ssize_t remapped_nvme_show(struct device *dev,\n>  \n>  static DEVICE_ATTR_RO(remapped_nvme);\n>  \n> +static int ahci_validate_bar_size(struct pci_dev *pdev, void __iomem *mmio)\n> +{\n> +\tu32 cap = readl(mmio + HOST_CAP);\n> +\tunsigned int max_ports = ahci_nr_ports(cap);\n> +\tu32 last_port_end = 0x100 + (max_ports * 0x80);\n> +\tresource_size_t bar_size = pci_resource_len(pdev, AHCI_PCI_BAR_STANDARD);\n\nLong line. Please break it after the \"=\":\n\n\tresource_size_t bar_size =\n\t\tpci_resource_len(pdev, AHCI_PCI_BAR_STANDARD);\n\n> +\n> +\tif (last_port_end > bar_size) {\n> +\t\tdev_warn(&pdev->dev,\n> +\t\t\t \"BAR5 too small for %u ports (last port ends at %u, BAR %llu)\\n\",\n> +\t\t\t max_ports, last_port_end, (unsigned long long)bar_size);\n\nHere too, long line. Break it after last_port_end.\n\n\t\t\tmax_ports, last_port_end,\n\t\t\t(unsigned long long)bar_size);\n\n\nWith that fixed, looks OK to me.\n\nReviewed-by: Damien Le Moal <dlemoal@kernel.org>","headers":{"Return-Path":"\n <linux-ide+bounces-5555-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-ide@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=drMSmXj6;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c09:e001:a7::12fc:5321; helo=sto.lore.kernel.org;\n envelope-from=linux-ide+bounces-5555-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=\"drMSmXj6\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=10.30.226.201"],"Received":["from sto.lore.kernel.org (sto.lore.kernel.org\n [IPv6:2600:3c09:e001:a7::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g3swD4smTz1yJX\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 27 Apr 2026 15:45:00 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sto.lore.kernel.org (Postfix) with ESMTP id 8086C3000B3D\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 27 Apr 2026 05:44:57 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id E828B34E75A;\n\tMon, 27 Apr 2026 05:44:54 +0000 (UTC)","from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org\n [10.30.226.201])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id C5F86223708\n\tfor <linux-ide@vger.kernel.org>; Mon, 27 Apr 2026 05:44:54 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPSA id EB09EC19425;\n\tMon, 27 Apr 2026 05:44:53 +0000 (UTC)"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1777268694; cv=none;\n b=sfbMimDSGy3t1/QrbvuguGPUh+CmPGY2nmTe8yPoNixVFmkqkTz82csl2mq03fZ5tkklV4PJ/tP6hEExHH/DllKVPYba+nmF1Y/huiILPIad4awi94N88IuBxqOhB0yf3YmJW834RcahrIWMwFB+t/3KS3ttk/p5nUeFwJnDu0w=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1777268694; c=relaxed/simple;\n\tbh=JWuwILYCZ474+w6QaLDovJO75S4kiKNHOf1l8YoFNjI=;\n\th=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:\n\t In-Reply-To:Content-Type;\n b=pBUcfPzzJpflhrnptIX5q1PgIsootVeNP+ak4c96PWp8bFwRZTG5Yt+76qWTqdngFhkMVqHmCXXyfz5WVxO2CmZNPVpMjoVFwsfUNeF+lJt0zrE5hEbrfA/SVzD0mI2l4Mq0z/cFS1LnOom1ZbDlK/6a3wUkMPJ62936U0fcW54=","ARC-Authentication-Results":"i=1; smtp.subspace.kernel.org;\n dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=drMSmXj6; arc=none smtp.client-ip=10.30.226.201","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1777268694;\n\tbh=JWuwILYCZ474+w6QaLDovJO75S4kiKNHOf1l8YoFNjI=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=drMSmXj6RSWB5woDVyBwlarWw5BJeFXLCfqv3MuD57UPOorYvgqdVPSx5aztWOr84\n\t K8h94gbz1ORsg/Sq6kDrHJiShTLDe1PNMQ5VEuhyF82Hrtq5v9lhGc9KZFQa9euvIm\n\t WEE6Lr+qRpG+AHII/Bqv6r/ez4rD7uMO+jMGEKXWgL5z+VY3s2DZrhrI8By0RQB4ob\n\t EXFjW3tG3uoH+r9KJ2LjUk1ct5pfgQiP0w7eF53xIBHLjfyy7GsCxko0C6dkV0MtHj\n\t ZsTfru4a2RY4pCvU5wgESHoGM8L58cMN9IQQRAs5hxX6wzrbfCTwSPoObZKG2lzzqa\n\t FaRXLCM+90lQA==","Message-ID":"<2a79933e-9051-4d5d-a95e-c4bfc2c2c932@kernel.org>","Date":"Mon, 27 Apr 2026 14:44:46 +0900","Precedence":"bulk","X-Mailing-List":"linux-ide@vger.kernel.org","List-Id":"<linux-ide.vger.kernel.org>","List-Subscribe":"<mailto:linux-ide+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-ide+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v3] ata: ahci: fail probe if BAR too small for claimed\n ports","To":"dayou5941@163.com, linux-ide@vger.kernel.org","Cc":"cassel@kernel.org, liyouhong@kylinos.cn","References":"<20260427053752.613848-1-dayou5941@163.com>","Content-Language":"en-US","From":"Damien Le Moal <dlemoal@kernel.org>","Organization":"Western Digital Research","In-Reply-To":"<20260427053752.613848-1-dayou5941@163.com>","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"7bit"}}]