{"id":2228582,"url":"http://patchwork.ozlabs.org/api/1.1/patches/2228582/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-ide/patch/20260427053752.613848-1-dayou5941@163.com/","project":{"id":13,"url":"http://patchwork.ozlabs.org/api/1.1/projects/13/?format=json","name":"Linux IDE development","link_name":"linux-ide","list_id":"linux-ide.vger.kernel.org","list_email":"linux-ide@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null},"msgid":"<20260427053752.613848-1-dayou5941@163.com>","date":"2026-04-27T05:37:52","name":"[v3] ata: ahci: fail probe if BAR too small for claimed ports","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"242f422c98024844707890f9bc9b224ca1f08ed4","submitter":{"id":93214,"url":"http://patchwork.ozlabs.org/api/1.1/people/93214/?format=json","name":"李佑鸿","email":"dayou5941@163.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-ide/patch/20260427053752.613848-1-dayou5941@163.com/mbox/","series":[{"id":501573,"url":"http://patchwork.ozlabs.org/api/1.1/series/501573/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-ide/list/?series=501573","date":"2026-04-27T05:37:52","name":"[v3] ata: ahci: fail probe if BAR too small for claimed ports","version":3,"mbox":"http://patchwork.ozlabs.org/series/501573/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2228582/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2228582/checks/","tags":{},"headers":{"Return-Path":"\n <linux-ide+bounces-5554-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 (1024-bit key;\n unprotected) header.d=163.com header.i=@163.com header.a=rsa-sha256\n header.s=s110527 header.b=nAfqOvkI;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.234.253.10; helo=sea.lore.kernel.org;\n envelope-from=linux-ide+bounces-5554-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (1024-bit key) header.d=163.com header.i=@163.com\n header.b=\"nAfqOvkI\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=117.135.210.4","smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=163.com","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=163.com"],"Received":["from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g3smq0BDFz1yHv\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 27 Apr 2026 15:38:34 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 623293004205\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 27 Apr 2026 05:38:29 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id DC1AA26158C;\n\tMon, 27 Apr 2026 05:38:28 +0000 (UTC)","from m16.mail.163.com (m16.mail.163.com [117.135.210.4])\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 46D9A223708\n\tfor <linux-ide@vger.kernel.org>; Mon, 27 Apr 2026 05:38:23 +0000 (UTC)","from localhost.localdomain (unknown [])\n\tby gzsmtp4 (Coremail) with SMTP id PygvCgDnt0ky9u5p32pTBg--.97S2;\n\tMon, 27 Apr 2026 13:37:57 +0800 (CST)"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1777268308; cv=none;\n b=G8WgyIZSN3I4a2jngTnqRiNQXkKtKQVfgjpS+NwdDSu/jJl8yHTTUxmJen056STAG1iAL2zA9Yv7nyfUvtQ9RPyHtT4wsI9cTizitYHUC9rcT5tkEKhCR6XumAJbT5IypE06eGHWsr42bER1vGc9rrfFkk/+zK/wr55NhdoAM9M=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1777268308; c=relaxed/simple;\n\tbh=4vrungAFMDSFJMS4VWWxF37qjeJgD35eGndwMe1zdhE=;\n\th=From:To:Cc:Subject:Date:Message-Id:MIME-Version;\n b=DcHHB4mi4FmUNogW7U+Sw3hEr4KdEWH7IAH87/DyONTB1uVTQWgbmHJ+Q8VE17SfvYvBfbrCgQ5llM2/+MAC+Mu5W2emdV4dOZgxQ9wzk6/DDOr0ltYL/pX1okXNUwj5/mEIXG2/OB6g9h4whHvzTCoVG5Cdo/L1E/4QuJLnZmA=","ARC-Authentication-Results":"i=1; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=163.com;\n spf=pass smtp.mailfrom=163.com;\n dkim=pass (1024-bit key) header.d=163.com header.i=@163.com\n header.b=nAfqOvkI; arc=none smtp.client-ip=117.135.210.4","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com;\n\ts=s110527; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=z+\n\tlX1RX3c8LLaUmdkZlIqR+h1uFs58E3RZKvVuZyh1A=; b=nAfqOvkI5M7JKq/sfk\n\tb0EQJY/KnQqN8AmuwFZcPWDfDEpD70CRIGe4p0cfHAySkWtYcmzZXvYFGTIB0apk\n\tU2CrVOrqDDbzjXAI4MdY0oCaooyyok1+3a9Sg991xw8kpocFOJ+7Fesjb6WpEvAV\n\tzDTmk0HPWd6EuGBAXE4ms04jU=","From":"dayou5941@163.com","To":"linux-ide@vger.kernel.org","Cc":"dlemoal@kernel.org,\n\tcassel@kernel.org,\n\tliyouhong@kylinos.cn","Subject":"[PATCH v3] ata: ahci: fail probe if BAR too small for claimed ports","Date":"Mon, 27 Apr 2026 13:37:52 +0800","Message-Id":"<20260427053752.613848-1-dayou5941@163.com>","X-Mailer":"git-send-email 2.25.1","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","Content-Transfer-Encoding":"8bit","X-CM-TRANSID":"PygvCgDnt0ky9u5p32pTBg--.97S2","X-Coremail-Antispam":"1Uf129KBjvJXoWxJF4DCryfZF1fKFWkGFy8Zrb_yoW5GrWUpF\n\tW7KFZYyrWUWF47X3W5AFs29ry3Gws3Wa47tay7Ga93trn0k34xWF1fta47Aay3J3s7G3WI\n\tq34qqr18ur4UAFJanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2\n\t9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jbCztUUUUU=","X-CM-SenderInfo":"5gd103ivzuiqqrwthudrp/xtbC3hbgj2nu9jaj7wAA3s"},"content":"From: liyouhong <liyouhong@kylinos.cn>\n\nWhen an AHCI controller is disabled in BIOS, its HOST_CAP register may\ncontain invalid values (e.g., 0xFFFFFFFF) indicating an impossibly large\nnumber of ports. If CAP.NP claims more ports than can physically fit\nwithin the mapped BAR region, accessing port registers beyond the BAR\nboundary causes a kernel panic.\n\nAdd validation in ahci_init_one() to check that the BAR size is\nsufficient for the number of ports claimed in CAP.NP. The check\ncalculates the required MMIO size as:\n\n  required_size = 0x100 (global registers) + max_ports * 0x80\n\nIf required_size exceeds the actual BAR size, the probe fails with\n-ENODEV, preventing the panic and providing a clear error message.\n\nThis solution follows the suggestion by Damien Le Moal and Niklas Cassel\nto detect and reject obviously broken controller configurations early.\n\nReported-by: liyouhong <liyouhong@kylinos.cn>\nSuggested-by: Damien Le Moal <dlemoal@kernel.org>\nSuggested-by: Niklas Cassel <cassel@kernel.org>\nSigned-off-by: liyouhong <liyouhong@kylinos.cn>\n---\nv3:\n- Fix patch format: add \"---\" separator and move changelog to correct location\n- Change dev_err to dev_warn as suggested\n\n---\n drivers/ata/ahci.c | 21 +++++++++++++++++++++\n 1 file changed, 21 insertions(+)","diff":"diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c\nindex 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+\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+\t\treturn -ENODEV;\n+\t}\n+\n+\treturn 0;\n+}\n+\n static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)\n {\n \tunsigned int board_id = ent->driver_data;\n@@ -1988,6 +2005,10 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)\n \tif (!hpriv->mmio)\n \t\treturn -ENOMEM;\n \n+\trc = ahci_validate_bar_size(pdev, hpriv->mmio);\n+\tif (rc)\n+\t\treturn rc;\n+\n \t/* detect remapped nvme devices */\n \tahci_remap_check(pdev, ahci_pci_bar, hpriv);\n \n","prefixes":["v3"]}