From nobody Fri Sep 25 20:46:57 2026 Received: from LO0P265CU003.outbound.protection.outlook.com (mail-uksouthazon11022129.outbound.protection.outlook.com [52.101.96.129]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8F9C43B2FFE; Tue, 8 Sep 2026 20:32:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.96.129 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788899565; cv=fail; b=cGDpr8sJOLdP74f0kymrDNsQYfgapWASGt2okm5m+PeWpaxsFe+/78qjmb6PYD8Hee7eaqQM5CF3wIKrIY2HjhY9wDwk/bbzMngWKBvFg9TUc0AOCu9sQFZzcA3OYGkbq7vFFUO64eVb1zRbdfIdTbd36FmRNDF4f8cuXEgjyiU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788899565; c=relaxed/simple; bh=6yEWKeQb/SEoo+2lpor2jRQcRYZHkb4uTbjtAbKjQbY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=R2GTzjg4p09KrPXGoWkkcwnzQj5td0i/uGBSFNTIHaohuho24Spbwxco2gCzTHDm+dNVgV+0mespds6qgcmWTAuOhPKj/utIZA2s5vEdazNwLGhLUoLrkKQlyW68yJDXz/ogYyGbWWygFdoINQuz/HKafCe7P9Dua84icMpbaYc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com; spf=pass smtp.mailfrom=atomlin.com; arc=fail smtp.client-ip=52.101.96.129 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=atomlin.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CBfHEp56RfU+lSmQcm5WSqz0s5PhHMrHGaNRdmDzB/ux1lyEaE+iVfBL7WFL4oYE0sZq7pnG7z3BUDWOR2BTtrPFAgvcOk/hwjidDczDjmPodT5SnAtVGFmtVMBlQygu/GNq6JX44UfxCDTcUHA7LUguuKqQmacn5MxmRW/MmWrwo1Qj7IcagS/sAaJjxVb+/EKCehsp00zXYMbm8Qb1fkMIAzcLRK6a/iQPuRFO4bo5Tl1haxvtvnElRWCkBXJJRBBzNKgK5nhdzKeH7QawLBbqeQUJGqk/fBjBFf8VKfZcAvr55y73sKG/uq9giX8QG14JU9/x9uxtFvl/v/2R1w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:MIME-Version; bh=I6N2x9whj4JzC7LETE3SPsVQkRtwuSL6bGItzjlypVw=; b=khRtyFh9v6ob1a6xC33zCeC3smpAjLzGGKJvUNc4RT+XOBRC0dYRs6vHB/WK4eCQdnXW8N8ERtDXBwtNo9/lrNax4A/lOGpVyiV1Abh+M4Br6MHEYHLrjd9oyiMDuhgxIwRxwVSdgBBZeugN16oGuhyZFfcW5AFnwHXZcivkVn9NfiUvmIz9fEsq9Jv5kcBUdyFewNdp0hwVf0lzAEpZuZT7oh6gIDXJv3bgOKgPoG8xVK2rpjNHH0kATtmMec41MWKILFRbGNDnFUQ7W1Bmz9U+wg5qptR7Xrd8RE8E9Ri8ekvGHeCv++jE8NKcfPp9WPSgTm/OaIYvPZoebixKww== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=atomlin.com; dmarc=pass action=none header.from=atomlin.com; dkim=pass header.d=atomlin.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=atomlin.com; Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) by LO6P123MB7126.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:341::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.7; Tue, 8 Sep 2026 20:32:39 +0000 Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230]) by CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230%4]) with mapi id 15.21.0406.005; Tue, 8 Sep 2026 20:32:39 +0000 From: Aaron Tomlin To: arnd@arndb.de, mcgrof@kernel.org, petr.pavlu@suse.com, da.gomez@kernel.org, samitolvanen@google.com, peterz@infradead.org, ojeda@kernel.org Cc: akpm@linux-foundation.org, gregkh@linuxfoundation.org, mhiramat@kernel.org, boqun@kernel.org, atomlin@atomlin.com, neelx@suse.com, da.anzani@gmail.com, sean@ashe.io, chjohnst@mail.com, steve@abita.co, mproche@mail.com, nick.lane@mail.com, linux-arch@vger.kernel.org, linux-modules@vger.kernel.org, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v11 1/3] module: Treat dashes and underscores interchangeably in module_blacklist Date: Tue, 8 Sep 2026 16:32:28 -0400 Message-ID: <20260908203230.401020-2-atomlin@atomlin.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260908203230.401020-1-atomlin@atomlin.com> References: <20260908203230.401020-1-atomlin@atomlin.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BLAPR03CA0002.namprd03.prod.outlook.com (2603:10b6:208:32b::7) To CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CWLP123MB6607:EE_|LO6P123MB7126:EE_ X-MS-Office365-Filtering-Correlation-Id: ec0f18c8-ef11-43eb-1089-08df0de8539f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014|23010399003|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: TzelBlaNS0ZydXdEGlcO5IrFyZT1dWnnNBcgzegTPI+XxX+XLqvvfXltSoYgh5M9NKOJp4fGgGrltBwnXO6hKQ7VSrC1RJbKqUtpM22q9eRyuoUiEji7z8K8ewD+I8vNpgAJmLJ/nF7CSbQCYHEKMMnzsv+KyL6+KtW0BsVZ8LfoFb9YB/eiGvzjaxXH7QtO1hFErKUEeqQGR1DjYbSoX8zDlArCizs+JsApQxTUamYpU+k8koNPDMQmLCc3+S2M3h3BVa8T27PTNP9M6sYUp7Eg1rAeWLnYh0AMGB6wsFDSkc4++WYfC6R6JLYcfKHphlm0MObMvKGpkUN9fEuIIUiD3hT3yVO1GFOoPZmog9CAFz4KX24FFS05W5qDtagnDM+H1ihe6QxIdQbBZXleFhp5uQFtjc8naAUYV5OxdItGusOSBz4UurVPJHkjhxjVJcNUa0m3AgK5E+U0Gcd7ZZo8ktac8GYxpicAgbS/WfH15yi4hAkq9eY0nrFflPMtZqC+KHFIcwJwRJR+ioHYbXcELNpYZvpkXLMHLWXNHL2hu5LLug0AONwuoPPi7E/cWgi4reHdOngiObBM0nlJHBHom7jukS0UToyJW99+NynL3RUny3s6c2fRJihCl8wzFh27vAI7C4xwVeW/vIS72R4UHi3jgwav+zRl1PNcEU4= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014)(23010399003)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?21hwkVtIWa/BEMenYrl+8hNVYHqmqIy+aAVlxuCsxmwm8SHV8mR/xmV2rc5n?= =?us-ascii?Q?41+F/66WyIg1WkVu7EDf6qNtxcRV4nWPDxvvea2rk6yI7pWFyJ/HqTx12LSh?= =?us-ascii?Q?qxVe9kUsLsSGlt6eeoVqvYFVAz9AgZC4C9PF91hHaktfDSOvG3WcGxME/ONx?= =?us-ascii?Q?VLoUWaBYU8jnM7Ann4q6noNNkmQJq6BWtiJhct4Kh7GQl9I7V96snSj0uZTB?= =?us-ascii?Q?WXJcL0ROZw3l0S2yWeYEN/Sh1Z/ybmKnXXZaIdRVEwaaHjI/884x/Lvb2o/g?= =?us-ascii?Q?fsunYGOkJ5A9Bd0XOzDkCXvADhbVMZUC4BuM77Y+dXVVRr2xYUIVtkCt5hI1?= =?us-ascii?Q?eJ44MP3BTqUs2pAlzYDk3hixiVUszSGgkkVagk2U2PFsq7PjQsdkcJlT43WI?= =?us-ascii?Q?BE+MKWowA5NYt6X3M40pbTwIWpbNZus/YwuK2tTr1nbPwrT+5f6p73U69gYo?= =?us-ascii?Q?fpbr0VjYU1hw7w0mq1xmhGVm+aAqDo30eYi5RlbZ5g2f9HJGGSf05q0wSlU1?= =?us-ascii?Q?W9xxAj84r+BraHOT2rmoI6EnbUya4bvHx+gSbwVNIK19g12yDB+UtzJmjRMf?= =?us-ascii?Q?/3z5STduaq+Fy91vutIkMmX1mZa7TNX3EGd7TmF9PTjrrXhQvUmGY7bU1JQ1?= =?us-ascii?Q?7+cBlxBOqTbLoqc2sYhHSoeFvOsJMRHD4Sfc5L9Ppqp3/VaIBcjqIp2CFSQB?= =?us-ascii?Q?ULG+ivksuNLbblEv//UmKIEXhGS4KZMxmH7EjROstSJYHDevudJdcxqIyr8A?= =?us-ascii?Q?H9IKEhx3hFals+N/Lfa+Z6KfjDq3Wv8P62vhV1IBTLGRBu9vRnYv1MzaMMI3?= =?us-ascii?Q?tlaTthBmj1m1vSej8SVEt0ulk1QGaYfJOEh/81sEUHb28sQ6j5r55yCSKtaq?= =?us-ascii?Q?o45aQoRbpm2XDSSpn3ldG0w0p4vsEOhvzVBhdoQuxhuXnl6uI/13OED7/J0+?= =?us-ascii?Q?5BZ+KAHeBtRSblrWhQbLJMf6ics611fbn3Jf1M+Zgk9IrV0nZeaFUNOYMTYy?= =?us-ascii?Q?4ePITDW2rlm8j9dkuf/X5U//AAiJOq2+89BE4c5GV4Eq2ve5c7Gan7cXCBhW?= =?us-ascii?Q?ndhm3i5aGU21WekBLMqQBBmyaX+CcQnknXG04xEQDZPSg3r8zvv1L8Ia3tgN?= =?us-ascii?Q?TySP4jB6LEAZWs0Zh7abeKVaaYYpkIwttNmwou5MB2jGXUwrDcNlp5S2O7mz?= =?us-ascii?Q?n8C0TBx5xAa0yx7U8G7ML4JaOdxO/U4yGTqZgrdowjj6TCfETo5nS3VFeN25?= =?us-ascii?Q?wchJ8FEGEzYtdlINKkEFew61Nt9fnKaxVY/LZm38Qrmf/0g1YklO3SEdLmtO?= =?us-ascii?Q?8f7aCGMqcT4P347FjUSJIkChJLSNyKOn6/SbYrakTmJFuI6m+vjbSD4Hlo6O?= =?us-ascii?Q?MXW9NfaXEdXr+z3UvCpBJQl1pW+MLjqr7qKma+yp8eMo/zpa5OC1dCfF1AXd?= =?us-ascii?Q?DTC5sFJiOgXOCIfZ/z7GR30IMAw29u5tqyILf+cjidheil/xlL7D/BPerf8J?= =?us-ascii?Q?8aUAsgCfxBWU6Ewi+WpM5PXFzofnXt2uv0XrpngxWTICnb3V1LqVdGfRar78?= =?us-ascii?Q?BaQGC2rNRTVSNX/LBI8cI20yJEE4JR/LZwxgoB8f//Wwir5qVbGhjZ9pWFAE?= =?us-ascii?Q?Ifjo2MVlleNWWZnlUg+bLLDHXvrPxJV75wtlZrAnM6XuiidiJyKfdqCNFU9+?= =?us-ascii?Q?Prg/qxh2of99VgZu4MA8qTy5kczZSa0XtLn/ckteqzhGrqTk/9bHYBfgL7T9?= =?us-ascii?Q?/bBap/L9kA=3D=3D?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: ec0f18c8-ef11-43eb-1089-08df0de8539f X-MS-Exchange-CrossTenant-AuthSource: CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2026 20:32:39.8535 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e6a32402-7d7b-4830-9a2b-76945bbbcb57 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XPQ1Z17bGXx3AGOCIra+Tj12sOVmcYfBMXyCu20LbOe2GyKZcAOIMrvK3+RAzGfbsx/ctkBmapDy220CqbdQkw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO6P123MB7126 Content-Type: text/plain; charset="utf-8" The "module_blacklist=3D" command-line parameter allows administrators to prevent specific modules from loading by specifying a comma-separated list of module names. The blacklisted() helper checks candidate modules against this list using a strict byte-for-byte comparison via memcmp(). However, the kernel build system normalises module names to use underscores (e.g., "my_module"), whereas administrators and user-space utilities may use hyphens (e.g., "my-module") interchangeably. Because of the strict memcmp(), specifying a module name with a hyphen on the kernel command line (e.g., "module_blacklist=3Dmy-module") fails to match the internal module name ("my_module"). Consequently, the module is loaded despite having been explicitly blacklisted, defeating the intended administrative mitigation. Replace memcmp() with parameqn(), which treats dashes and underscores as equivalent. This ensures that module names match correctly regardless of whether hyphens or underscores are supplied, matching standard kernel parameter and modprobe behaviour. Fixes: be7de5f91fdc ("modules: Add kernel parameter to blacklist modules") Reported-by: sashiko-bot Cc: stable@vger.kernel.org Signed-off-by: Aaron Tomlin --- kernel/module/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/module/main.c b/kernel/module/main.c index d0e1e0bd2ad0..2b708c59f0f1 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -2942,7 +2942,7 @@ static bool blacklisted(const char *module_name) =20 for (p =3D module_blacklist; *p; p +=3D len) { len =3D strcspn(p, ","); - if (strlen(module_name) =3D=3D len && !memcmp(module_name, p, len)) + if (strlen(module_name) =3D=3D len && parameqn(module_name, p, len)) return true; if (p[len] =3D=3D ',') len++; --=20 2.55.0 From nobody Fri Sep 25 20:46:57 2026 Received: from LO0P265CU003.outbound.protection.outlook.com (mail-uksouthazon11022129.outbound.protection.outlook.com [52.101.96.129]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3DA7C2F8BEE; Tue, 8 Sep 2026 20:32:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.96.129 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788899567; cv=fail; b=h2jOIfnegLqzPVngoGhPA7YhsbQpUxoEXBBZtK+wgCt5sIP3e/wCrPI2KMM57U3EpEPjmihNW8Ex+Zlj2UnQGU9m71lP8XPhwzNZWwHhvbHSL1/O82mpSOiayfj6V9PliP/sqfVJ7U7Dhmr4MXyI4E1CRNYn+8Ou5z9mkJh2a/M= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788899567; c=relaxed/simple; bh=ydfbNqN7kU2FRD7XMtSdE0sdgJn/wbnSbBLSy6G2p2s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=QimlKNYSs5KxKxN2fhooKrUTPCswP5tENM8ADnJBJUZtHiI59LhELZE1RI3f85smCz+hWOYLUe4a5QiHOCOng4np3s8Kd7+lNPLgDgrcs9mIvPkBLNE7n8v/6kftD1XNtKsuzxCuYlXpREgUtdKh047xWsMposBFi8ZTuQ2QsgM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com; spf=pass smtp.mailfrom=atomlin.com; arc=fail smtp.client-ip=52.101.96.129 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=atomlin.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bkh3u30IrF6bj1DSdhQ8nQiWL/VvNfuiBPZJByfZJvfstsx/bqyYCSpuYmQ6T6PoUrIeQXXvoGsvFDEfNBmGfLibJeov6I5KbCKWOCRhYwADjYAOFqQX07dErhmlhq0kGKT0XPobOiaADgQDfhoUnlB8L/hGG8SsV6+cGZA61bl86+jQG4hxVsL+/Qtj0eZ56BA9pEX2sHJrxzkKGDaGHKPn2zcEB7SBiXtvszB27s4vv68yzSSpy9xzBqAWm3B+mRV5gGDNwomW2VH5Ta4iSWsb3rCRT57V37ct10xYzj8GEjeHjbqGmUcQn4lSkaGGFm5cUpML6ShaMn5i6tMiJQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:MIME-Version; bh=5PO4qLHobCw6nN3YVqZCmpDmVcscqE+mIlJ6gNAWdWQ=; b=J2y9yiZTqsLfLylRLqqg+AU6x8hDPBsZMpG0f7wzmm87rvuUxsJdLtrJXXMWpNbHwWRyiZsg1Adp9j0faCx1K3wfvAAvaoWgaxr4AmNc3DmeMgEF8ychqGTn/bd4/ZP42C2dftT0c1SoDiICG/d5SpcgVlCAKFNibf0fVdIfLu2WQAEDeWsulnPY3oDszrX5PJXnfnTeGIDEWWTCe4GvHtO/Q1kSHioMZy+qCfPNAKmSF3mQxD8eZZdvxjPGxJYbkfcF1D8qeWmsFh4EKK3P9Am9EtezcQikIHzJ1fqbSs26Lo7XGfGfVwVDknaz/hdvVDkmpuLcKn29kckqQpULyA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=atomlin.com; dmarc=pass action=none header.from=atomlin.com; dkim=pass header.d=atomlin.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=atomlin.com; Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) by LO6P123MB7126.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:341::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.7; Tue, 8 Sep 2026 20:32:43 +0000 Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230]) by CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230%4]) with mapi id 15.21.0406.005; Tue, 8 Sep 2026 20:32:43 +0000 From: Aaron Tomlin To: arnd@arndb.de, mcgrof@kernel.org, petr.pavlu@suse.com, da.gomez@kernel.org, samitolvanen@google.com, peterz@infradead.org, ojeda@kernel.org Cc: akpm@linux-foundation.org, gregkh@linuxfoundation.org, mhiramat@kernel.org, boqun@kernel.org, atomlin@atomlin.com, neelx@suse.com, da.anzani@gmail.com, sean@ashe.io, chjohnst@mail.com, steve@abita.co, mproche@mail.com, nick.lane@mail.com, linux-arch@vger.kernel.org, linux-modules@vger.kernel.org, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v11 2/3] module: Extend module_blacklist parameter to built-in modules Date: Tue, 8 Sep 2026 16:32:29 -0400 Message-ID: <20260908203230.401020-3-atomlin@atomlin.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260908203230.401020-1-atomlin@atomlin.com> References: <20260908203230.401020-1-atomlin@atomlin.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BLAPR03CA0002.namprd03.prod.outlook.com (2603:10b6:208:32b::7) To CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CWLP123MB6607:EE_|LO6P123MB7126:EE_ X-MS-Office365-Filtering-Correlation-Id: 0eecaf46-f7bc-4fc5-c363-08df0de85594 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014|23010399003|6133799003|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: zIxhHtshcFFf2GEFZRoAJ9fLzqOFtC2LTKOx2TUJe7AX1gfntmpUUrjVQju5eCJcP3VeJ9OMIPMiQucXHburMFm7L76faspXP9fYCKIDzQAZ8iEza6bu7afZ6swqqlviB/4GQZpR48mmKUlBZR/YExb8bItIITvC4IUDzDstX9y2QW1vzBl8kEgce0fZ4/tGEga0xpNzgpEQsNdQ1+8IV2hUFQBaAEz04G07cr4ZYQ3FgqUU9QicpaussZauMfJsHz9duc5wUKgi4LuCiFnWm4dPCQuqiDTAgU/hgmrxacb6j8ea0IjU2IDTLog4jSQLZHtc4vziWn/SqFoBDcJ+hHgFYUa4BMTXML7iOiSBhOIrc7Zj0fGaL/kO4Ok4q5zOXvRPMxa+AYF6QiUpMAWuQkh5ZIPxcR2USQ4mNNZuQM+stSw0OpsxXJyJ9WTbjDTME9MW6Z5kbpnyRyUIMuKDZcnWlNdoso0IxEDpk7wR6dS0yZttF0HZEYTKh7reaffWrvO2K6mGBOpPNapc+XU3XgBHDPXWQYborDJNKvM8+2zZnetDtwIhltA6yjvJHbPcailRH3eeBiPPsAPUyInzlt7CME7em+/jxXDbufRX5+9HCqsk3wFhB9awp7TwRJH7KYNawoNMu8isrbjMwDqCcRK63YU4yCDYT0c2J8MPutA= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014)(23010399003)(6133799003)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ef/4ttV1tK7HVMj79rkAn1lcv6puMp9QLrZKLymEjDtzENJsZGpVHNBfy9Go?= =?us-ascii?Q?BvBGMg4e4jGgUn4BSDODRzkupklDHOIdIrTiqI62/SVi+/fYI9ot9gXtVJLe?= =?us-ascii?Q?KYKv8WrUVldKRsYTbbyUUII2PpZCcTX3F4LmOq/dHe2u7nDi3Uk9fqR1bqbE?= =?us-ascii?Q?6UgYLPayenmTGmZ4/zdLh6goSEeo6V+JtBHx/FCvNhqZpnHaLo7/P+5395FA?= =?us-ascii?Q?E/4VLWVWZjXFesLIOuAgfgluv4QMn6WuAhPWtWyXk7MJZmuOkjLBVFN11ojd?= =?us-ascii?Q?KUjhp1sqq/vOF4hHKQV3H0+uW5Oz62+VGVTN4gqse4snBEdczItynYWCMlqF?= =?us-ascii?Q?y0BjzCCB92LhNi0XQB4VB4O/Ic1vBpN7X0sBSSuByxLRc347EyPum793ncmD?= =?us-ascii?Q?zV+RKpJcQiXruRE8kWmVgcGie9gJdUIFDlg1YCE7F/fQBbBufYjIqiCwROa5?= =?us-ascii?Q?E2jZblaqHq8YBk+B9Q17M+/u8vVqCEqO8NtU0MYW7Q9wrKFBbKtuVZNzIsab?= =?us-ascii?Q?wq3qhdKrBGcRGkguBX1hYeHPz8tnwMGE/rxjwnALx00QDGlus5EFmRcf+z6m?= =?us-ascii?Q?HvmyUjGknJfcOnp7s6S4yJu3unDOkKngQXibCtafKOZGKt6Vvc6R/lfrp+th?= =?us-ascii?Q?9ambS4kU2dyCSCsASM9JaKJpHbKvthPT1XGbHb1K4Z1SY8mioKaY5riLZky4?= =?us-ascii?Q?J0Rup7CFCsf2N9yaSY/50uUPsupUsWesNbCJ3svAyCtKP7iKvSrZNNcbRnxd?= =?us-ascii?Q?RPKmPHPNtwJSMr+SheF78jPhUQUTjwZ9DSg1tLItWopQiivx4k+c/HPmO187?= =?us-ascii?Q?mi0Y5Wzv10uzNbda16xOU0LSxvA66UMEeY5jQsbfYdVLAFWYVHGbaU6/LO3k?= =?us-ascii?Q?Rrqm9Z7mbVMeAk9i9DMWfgnW9+Khc6uimlIRFWX0JyOagV2JWLG/nh3amsYL?= =?us-ascii?Q?C9y7/9VJbQ2MyCH5x7OPJmwZWHT7pqaIB7dTGf10k5Aelm9z7O/Rn2/BoYUt?= =?us-ascii?Q?MqO2higbAzSosGvMFbKk3fX2q8iyevQNxIAjHAZuqH8C/fQKndlX+wweJRIV?= =?us-ascii?Q?U0SXNYHAJln+Hsn2/FR0QeKFgPB7GoT+IR7CYG4STgANgiO/NWx07S0s2OVS?= =?us-ascii?Q?VXqcjsPo0Zg8W3hpApGYnjCHRzE5YmCYIPI/vYVtl2uVJg0tlwxc+C/xi8eM?= =?us-ascii?Q?4VPlFlSFJEE1LPG05D6OnpbEPa5r7QnkZuEoClKjk2pIrWeQ3VMk0z/EabG0?= =?us-ascii?Q?rYt9SFEarRq7+J/Q+O4j9Nf+noPmUbWqUUHVvANavGxfTQ3PTHfXb35FRQVM?= =?us-ascii?Q?jY3vmumApHL8tKgyGdJzGW2ZIGIGRrxAqW4/PGGc/owsG8eHXRHmfYL9lIWg?= =?us-ascii?Q?+Qa7+RwcR1UHn8OURFQ6JK/HiXvNi1fw0XRqBX979RoXlKUfgZbBWCk+D6pj?= =?us-ascii?Q?miuMRm4s1hqSEhhRXQJq0m6YcUkT3a2nICFUW4OyuppzrDL9YFeMGDlVbxur?= =?us-ascii?Q?KfkgtgHKiY37hbqWiYPQCYTsDloRW2hOPX/L9UPFmgFCuRLvPs5xtNE5HSSQ?= =?us-ascii?Q?GCTmNjQIxjgp3ztESrpRcsdsOFiSQ9oPeR+t5bGuuMO2I/L4LIeemVDxZVim?= =?us-ascii?Q?w5jRmMi8/H6vv3RYNYlhS6+fko/ui9fjF4sRTUf3ehKsQ6zcBveKWYKVZgPW?= =?us-ascii?Q?92jKtrziADk9uYQ5gPyBOauizqCKsgnKkFGNYPEqz0KBLW2tfC3vYJYbBaU0?= =?us-ascii?Q?QEgsjJDqCQ=3D=3D?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0eecaf46-f7bc-4fc5-c363-08df0de85594 X-MS-Exchange-CrossTenant-AuthSource: CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2026 20:32:43.2025 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e6a32402-7d7b-4830-9a2b-76945bbbcb57 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: n0XnkDppK7d5IW6UaM09MwOG/g534TDSYkulQT9tP0fATYCsZZRIAZ25N/GYY+98JxKp4VI99ISqauWC8Lc49Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO6P123MB7126 Content-Type: text/plain; charset="utf-8" Currently, the "module_blacklist=3D" command-line parameter only applies to loadable modules. If a module is built-in, the parameter is silently ignored. This patch extends the blacklisting functionality to built-in modules by intercepting their initialisation routines during early boot. To achieve this, we introduce a new ".initcall.modnames" memory section. For each built-in module, we use a standard C structure (i.e., struct initcall_modname) to map its initcall function pointer to its associated KBUILD_MODNAME string. This mapping is restricted only to files implementing built-in modules via module_init() to avoid mapping core kernel subsystems and save memory. During boot, built-in initcalls are executed sequentially via do_initcall_level() and do_pre_smp_initcalls(). We introduce a new wrapper function, do_one_initcall_builtin(), to cross-reference the initcall function pointer against the ".initcall.modnames" table. If a match is found and the module is present in the blacklist, the initcall is skipped. To make the blacklist functional on monolithic kernels, the command-line parameter parsing and the module_is_blacklisted() lookup function are decoupled from the loadable module subsystem and moved to init/main.c. This enables "module_blacklist=3D" to intercept built-in modules even on kernels built with CONFIG_MODULES=3Dn. Signed-off-by: Aaron Tomlin --- include/asm-generic/vmlinux.lds.h | 4 ++- include/linux/init.h | 25 +++++++++++++- include/linux/module.h | 4 ++- init/main.c | 54 +++++++++++++++++++++++++++++-- kernel/module/main.c | 22 +------------ rust/bindings/bindings_helper.h | 1 + rust/macros/module.rs | 19 +++++++++++ 7 files changed, 103 insertions(+), 26 deletions(-) diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinu= x.lds.h index b2988aa12f66..2187fb463de6 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -734,7 +734,9 @@ EARLYCON_TABLE() \ LSM_TABLE() \ EARLY_LSM_TABLE() \ - KUNIT_INIT_TABLE() + KUNIT_INIT_TABLE() \ + . =3D ALIGN(8); \ + BOUNDED_SECTION_BY(.initcall.modnames, _initcall_modnames) =20 #define INIT_TEXT \ *(.init.text .init.text.*) \ diff --git a/include/linux/init.h b/include/linux/init.h index 6326c61e2332..833b837ce11d 100644 --- a/include/linux/init.h +++ b/include/linux/init.h @@ -252,6 +252,7 @@ extern struct module __this_module; #endif =20 #ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS +#define __initcall_fn_ptr(fn, __iid, id) __initcall_stub(fn, __iid, id) #define ____define_initcall(fn, __stub, __name, __sec) \ __define_initcall_stub(__stub, fn) \ asm(".section \"" __sec "\", \"a\" \n" \ @@ -260,6 +261,7 @@ extern struct module __this_module; ".previous \n"); \ static_assert(__same_type(initcall_t, &fn)); #else +#define __initcall_fn_ptr(fn, __iid, id) fn #define ____define_initcall(fn, __unused, __name, __sec) \ static initcall_t __name __used \ __attribute__((__section__(__sec))) =3D fn; @@ -271,7 +273,28 @@ extern struct module __this_module; __initcall_name(initcall, __iid, id), \ __initcall_section(__sec, __iid)) =20 -#define ___define_initcall(fn, id, __sec) \ +struct initcall_modname { + initcall_t initcall_fn; + const char *modname; +}; + +#define ____define_initcall_modname(fn, id, __sec, __iid) \ + __unique_initcall(fn, id, __sec, __iid) \ + static const char __initstr_##fn[] __used __aligned(1) \ + __section(".init.rodata") =3D KBUILD_MODNAME; \ + static const struct initcall_modname __modname_##fn __used \ + __section(".initcall.modnames") \ + __aligned(__alignof__(struct initcall_modname)) =3D { \ + .initcall_fn =3D __initcall_fn_ptr(fn, __iid, id),\ + .modname =3D __initstr_##fn \ + }; + +#define __define_initcall_modname(fn, id) \ + ____define_initcall_modname(fn, id, .initcall##id, __initcall_id(fn)) + +#define __builtin_module_initcall(fn) __define_initcall_modname(fn, 6) + +#define ___define_initcall(fn, id, __sec) \ __unique_initcall(fn, id, __sec, __initcall_id(fn)) =20 #define __define_initcall(fn, id) ___define_initcall(fn, id, .initcall##id) diff --git a/include/linux/module.h b/include/linux/module.h index 96cc98568eea..bcc54edbde7d 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -86,7 +86,7 @@ extern void cleanup_module(void); * builtin) or at module insertion time (if a module). There can only * be one per module. */ -#define module_init(x) __initcall(x); +#define module_init(x) __builtin_module_initcall(x); =20 /** * module_exit() - driver exit entry point @@ -879,6 +879,8 @@ static inline void module_for_each_mod(int(*func)(struc= t module *mod, void *data } #endif /* CONFIG_MODULES */ =20 +bool module_is_blacklisted(const char *module_name); + #ifdef CONFIG_SYSFS extern struct kset *module_kset; extern const struct kobj_type module_ktype; diff --git a/init/main.c b/init/main.c index 2613d3f9b3ce..accaa8418aa5 100644 --- a/init/main.c +++ b/init/main.c @@ -1344,6 +1344,56 @@ static inline void do_trace_initcall_level(const cha= r *level) } #endif /* !TRACEPOINTS_ENABLED */ =20 +extern struct initcall_modname __start_initcall_modnames[]; +extern struct initcall_modname __stop_initcall_modnames[]; + +/* module_blacklist is a comma-separated list of module names */ +static char *module_blacklist; +bool __init_or_module module_is_blacklisted(const char *module_name) +{ + const char *p; + size_t len; + + if (!module_blacklist) + return false; + + for (p =3D module_blacklist; *p; p +=3D len) { + len =3D strcspn(p, ","); + if (strlen(module_name) =3D=3D len && parameqn(module_name, p, len)) + return true; + if (p[len] =3D=3D ',') + len++; + } + return false; +} +core_param(module_blacklist, module_blacklist, charp, 0400); + +static const char *__init get_builtin_modname(initcall_t fn) +{ + struct initcall_modname *p; + + for (p =3D __start_initcall_modnames; p < __stop_initcall_modnames; p++) { + if (p->initcall_fn =3D=3D fn) + return p->modname; + } + return NULL; +} + +static void __init do_one_initcall_builtin(initcall_t fn) +{ + const char *modname; + + if (module_blacklist) { + modname =3D get_builtin_modname(fn); + if (modname && module_is_blacklisted(modname)) { + pr_info("Skipping initcall for blacklisted built-in module %s\n", + modname); + return; + } + } + do_one_initcall(fn); +} + int __init_or_module do_one_initcall(initcall_t fn) { int count =3D preempt_count(); @@ -1416,7 +1466,7 @@ static void __init do_initcall_level(int level, char = *command_line) =20 do_trace_initcall_level(initcall_level_names[level]); for (fn =3D initcall_levels[level]; fn < initcall_levels[level+1]; fn++) - do_one_initcall(initcall_from_entry(fn)); + do_one_initcall_builtin(initcall_from_entry(fn)); } =20 static void __init do_initcalls(void) @@ -1461,7 +1511,7 @@ static void __init do_pre_smp_initcalls(void) =20 do_trace_initcall_level("early"); for (fn =3D __initcall_start; fn < __initcall0_start; fn++) - do_one_initcall(initcall_from_entry(fn)); + do_one_initcall_builtin(initcall_from_entry(fn)); } =20 static int run_init_process(const char *init_filename) diff --git a/kernel/module/main.c b/kernel/module/main.c index 2b708c59f0f1..0eb5700f9f73 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -2930,26 +2930,6 @@ int __weak module_frob_arch_sections(Elf_Ehdr *hdr, return 0; } =20 -/* module_blacklist is a comma-separated list of module names */ -static char *module_blacklist; -static bool blacklisted(const char *module_name) -{ - const char *p; - size_t len; - - if (!module_blacklist) - return false; - - for (p =3D module_blacklist; *p; p +=3D len) { - len =3D strcspn(p, ","); - if (strlen(module_name) =3D=3D len && parameqn(module_name, p, len)) - return true; - if (p[len] =3D=3D ',') - len++; - } - return false; -} -core_param(module_blacklist, module_blacklist, charp, 0400); =20 static struct module *layout_and_allocate(struct load_info *info, int flag= s) { @@ -3402,7 +3382,7 @@ static int early_mod_check(struct load_info *info, in= t flags) * Now that we know we have the correct module name, check * if it's blacklisted. */ - if (blacklisted(info->name)) { + if (module_is_blacklisted(info->name)) { pr_err("Module %s is blacklisted\n", info->name); return -EPERM; } diff --git a/rust/bindings/bindings_helper.h b/rust/bindings/bindings_helpe= r.h index 4b31aa7f432f..1075b26e53ac 100644 --- a/rust/bindings/bindings_helper.h +++ b/rust/bindings/bindings_helper.h @@ -63,6 +63,7 @@ #include #include #include +#include #include #include #include diff --git a/rust/macros/module.rs b/rust/macros/module.rs index bc7027f8dbb2..87908233a654 100644 --- a/rust/macros/module.rs +++ b/rust/macros/module.rs @@ -480,6 +480,8 @@ pub(crate) fn module(info: ModuleInfo) -> Result { let ident_init =3D format_ident!("__{ident}_init"); let ident_exit =3D format_ident!("__{ident}_exit"); let ident_initcall =3D format_ident!("__{ident}_initcall"); + let ident_modname =3D format_ident!("__{ident}_modname"); + let ident_modname_str =3D format_ident!("__{ident}_modname_str"); let initcall_section =3D ".initcall6.init"; =20 let global_asm =3D format!( @@ -491,6 +493,9 @@ pub(crate) fn module(info: ModuleInfo) -> Result { ); =20 let name_cstr =3D CString::new(name.value()).expect("name contains NUL= -terminator"); + let name_bytes =3D name_cstr.to_bytes_with_nul(); + let name_len =3D name_bytes.len(); + let name_byte_literal =3D Literal::byte_string(name_bytes); =20 Ok(quote! { /// The module name. @@ -591,6 +596,20 @@ pub extern "C" fn cleanup_module() { #[cfg(CONFIG_HAVE_ARCH_PREL32_RELOCATIONS)] ::core::arch::global_asm!(#global_asm); =20 + #[cfg(not(MODULE))] + #[used(compiler)] + #[link_section =3D ".init.rodata"] + static #ident_modname_str: [u8; #name_len] =3D *#name_byte= _literal; + + #[cfg(not(MODULE))] + #[used(compiler)] + #[link_section =3D ".initcall.modnames"] + static #ident_modname: ::kernel::bindings::initcall_modnam= e =3D + ::kernel::bindings::initcall_modname { + initcall_fn: Some(#ident_init), + modname: #ident_modname_str.as_ptr().cast(), + }; + #[cfg(not(MODULE))] #[no_mangle] pub extern "C" fn #ident_init() -> ::kernel::ffi::c_int { --=20 2.55.0 From nobody Fri Sep 25 20:46:57 2026 Received: from LO0P265CU003.outbound.protection.outlook.com (mail-uksouthazon11022131.outbound.protection.outlook.com [52.101.96.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 873373B8BBF; Tue, 8 Sep 2026 20:32:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.96.131 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788899573; cv=fail; b=tD7aBK19f7NE/sm20tFYuhlR77fItDSjw5p50bxx6fGY9izrS3USdP35D67DqR/+pU0GHlWG/XdMkHbB2HMQtpwhNEXDW2BFiTRd6UrkOfPvWIVq+lV24rJv4EaFX8hstBTktomj+zWb+DkookqTtrpT8H/fFi+JT4yqrn9XZog= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788899573; c=relaxed/simple; bh=tyF2Bjc51NZIe6k7mnwP81pviDAy1BucIJllUtKQGDo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ULuS9bA5AQJC8/VQMorj0IR/80Qt0B/ZLbeF63XO1QTog2+X45u7cg6X/ax2hNW2oqsGpQnoP048u54NtJm3Mz1nwOG/uPNGMF3LUxB9I4oCIhmBl7ZgA0AvO1a2DUP1TKBnEbBO3Hqfa5cOT7977myLZTz6u+5IpP5M5wS8Baw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com; spf=pass smtp.mailfrom=atomlin.com; arc=fail smtp.client-ip=52.101.96.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=atomlin.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=d8MJxS9QzLQbawI7o690I5LZR5nGM7KbZZZ7eOtmlDHxQl3J/O8sJiUApPT+SOcZ4NRyVxoJLwXjz3HY5dRU7MxeB1w+CmCm0gyzqdhMgyjFXXordXQ22Juc26ZEFsmN3X0f+YBkGOTQ56zow86WVGFWYjdGtYAR8Lp/XIXe/SmXihnsELfSxrYEABOftWXgPb/nzN7uj0esCKsWU2RNrP1AWwc3b3T91nIa8vazl+lhO4LhZtv5uAyoYjdnUk/gpjmuSEjOI15IKqERrN2ntNY/XHsQu8KKhgKkJgujfwJl+W9185FoRqOiKbd+gPfb0Nv00DV7s/1YHJzIGrsPmw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:MIME-Version; bh=vDN3Mv/ICYouKSOhaOfwsMY0CjSbDzBvFKaCtP3kvHI=; b=isCqK2iSdLub1YuyI36uHjSMV+rYibw3u90KY6wuu3d5L0qSd4B9XKuldxG5i+C2YZiEAfe5WI1tdOpW9aPV8HtIfAIZJteXpw4ToSBqv04EMhSmT4HwGTwUZX2gHiVKn2ROUw3zuxYXCWEMXPtWN3FwE/Zac6/+Gnteuz8F5jcoS7H+wumxrle5rX5IhgqxHFn3yw3qPIizTv2CMiOJnvauYhU3puxenXZH3qRgX941nv8f/mdizDvqGJ+n41sixylphAaSakfHp32aK0VaHBfdpkK3S0MlpSciKkVI4V4WWYI41IF+dMO6eDqEIQmiFIhDqyEr7ZJDbP3nxLBcng== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=atomlin.com; dmarc=pass action=none header.from=atomlin.com; dkim=pass header.d=atomlin.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=atomlin.com; Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) by LO6P123MB7126.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:341::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.7; Tue, 8 Sep 2026 20:32:46 +0000 Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230]) by CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230%4]) with mapi id 15.21.0406.005; Tue, 8 Sep 2026 20:32:46 +0000 From: Aaron Tomlin To: arnd@arndb.de, mcgrof@kernel.org, petr.pavlu@suse.com, da.gomez@kernel.org, samitolvanen@google.com, peterz@infradead.org, ojeda@kernel.org Cc: akpm@linux-foundation.org, gregkh@linuxfoundation.org, mhiramat@kernel.org, boqun@kernel.org, atomlin@atomlin.com, neelx@suse.com, da.anzani@gmail.com, sean@ashe.io, chjohnst@mail.com, steve@abita.co, mproche@mail.com, nick.lane@mail.com, linux-arch@vger.kernel.org, linux-modules@vger.kernel.org, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v11 3/3] module: Rename module_blacklist to module_denylist Date: Tue, 8 Sep 2026 16:32:30 -0400 Message-ID: <20260908203230.401020-4-atomlin@atomlin.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260908203230.401020-1-atomlin@atomlin.com> References: <20260908203230.401020-1-atomlin@atomlin.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BLAPR03CA0007.namprd03.prod.outlook.com (2603:10b6:208:32b::12) To CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CWLP123MB6607:EE_|LO6P123MB7126:EE_ X-MS-Office365-Filtering-Correlation-Id: 9e501e68-b6e0-43a5-dc78-08df0de857c0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014|23010399003|3023799007|10067099003|56012099006|5023799004|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: jBrEXcM+PcJLTmNsUZKav9Ylyr1d6JGCyV2LSJ/a3pWjLNOOeYEkkQs/mrINFsNm5NvPcznp3tw1eibKiUnFgB/U6W/v6tzat1MzVgyivDMHl+IKscSpSoWQIUpjzUB9ekmwtzwbNAQSr/CRFc6/RIwFr+eWOQJgtlk7OupHpHmIAlVtrnNDPTwg2gvtRyX0S5VIOfEG+LHebP7Ytvnzb6T7BXHLgv2WiMDhYX5fFBefOSPdeCpXfazyk7+CMGHsThDP5Yb6ROkEtYbhq32dkyyuII2dAlNIhXOoks8uAo5Aid7RBK1NOVI+LBlXrpRMruf3HWJSZEXIb++WNREyDXqI9kR+6kPsF+8CUZa2Rdep316x1I5/sTOon19dvdHn4h+KlPhxycwa4CfXS/Nc9JxczSwRpq7RzJqr8DWq9aPua7WYBmdmyQV5BLRbjXiydSpIxFZ3Cj9sxlQ5qBBWIghRSYTUUB5PMPY5O+TQUoZ1tVGJwZJWpYTb+vaBPVkXiHQ4RbBCeWGi7Prlde4yvLok2OiLz4U0j4HxN3sV/AmFkUUILGbS3lzYXuY0RCK2qGJNsvlwX1XeefxlV1Zxy8flvwOviXGdk+vgNi3LilHegv2f9o2KLYBpTiDrtSvgoG1kns+uVXZduP4lcQp9KF36daeoQFiXA1Hx10i4WQw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014)(23010399003)(3023799007)(10067099003)(56012099006)(5023799004)(22082099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?IjD8/gWo30royto2cidsfeHyJ3N67kRce+0u0FnN6LWs28CO2DU/q0chTTyI?= =?us-ascii?Q?36Ym7lByH1WcBmgRkr/kjjTu8cPxMeEI03L9hG0RfL2vlsddc9JYQf+Z3iQS?= =?us-ascii?Q?DVto8E03sHCLpVybTaKG1C+30AASNk2kcmrKurGrm6uRrcWrc0i3wrYu5ICW?= =?us-ascii?Q?icJWBzBl7RVhHadgy9pHssoZd4Y/3AzK+ZNt3MzdCM2DLMxa1toFBZoMra8m?= =?us-ascii?Q?WqYv6VTz1QYeh/SET9rCfWmHu+zPKBFks6QV3IhlTndJlj+mFz33sgTG/NDU?= =?us-ascii?Q?mmmU7min+KCNpwZXInoU3ZDxa+L1OSbFPh+g6Dea5dgJBulDemdpDEvQQmAn?= =?us-ascii?Q?9hlQJqqxObUUE71D3CCB2AXTW7IEgWQfAPZBeTUPv0xrl92RPq5/nt4Huwqx?= =?us-ascii?Q?beYGRoBIFAumMEAUNL8Bb10DRODMkhkO06HC92Og6k4W9NzVgmUplLQvLvYj?= =?us-ascii?Q?yDjGnzhKelT+bWrZDkDW2lUTITejabrNS5S68y82VWNZPlnTwU/YhJvzT6ak?= =?us-ascii?Q?kO0RngahL3igVkxH3/Ti5QHYQwK4ug15f0dAx/R/h7jGdUHT4b+K+h5odXmn?= =?us-ascii?Q?SAcm6/VOPmqpwWdnECd+UM2vOQR9scVoMdl8Ixcr7NC8yJpvVqY4ejnQr9Ul?= =?us-ascii?Q?AyYJ1w96u1YgOdF/GhBGSKQoL/vO2LwVC17kZ6zgyKi0xpv1agul91190KDU?= =?us-ascii?Q?9oSKv0Hk4pYhxqXJosDUDksZHkh1/Dg8vasLUh2fVPmtLRE2c8DbJrJvHOAM?= =?us-ascii?Q?yX+k4ivc7uVJcp5XichTNclbamRV4jutRghKQ0dTujYnW6U5byllAwwxjQoX?= =?us-ascii?Q?xY7AIakm6wzMulMrT26yy3Afw7sRahkWxWtrpEBrNTiAmt4YLtDBDogykXxG?= =?us-ascii?Q?4o4OmmXXleK/KzwYt4D2QTIr1Pp0NAOODbrYRxm2EqVVqF1kDzjEtwnlctbW?= =?us-ascii?Q?KgxRJBrRzwqWcGaZ9SvAdRHcDlvrITNhr1a4L2jACsUB4/3nWkqi/cT25ciT?= =?us-ascii?Q?vf2gJ+33Fng79MBG4KxF4bNLgh0lV9OaKvLQryqpfrPbZP4ck6I4cbUfZxx6?= =?us-ascii?Q?kdupcnIt/N8mrUch20D+93No10CsLOnwflrYNJ88rP1J2CIstAmVdkomkEBo?= =?us-ascii?Q?mJZWSw4Skm1+kwblx7+OS2EefZzhzNdFxB0d5Ks9HgNvOgBxUHa+kURw7kmo?= =?us-ascii?Q?7+bNG1NYeyB9sRhMNUljZn36eaHVyFql3s9tFTsoa++c1OSMkD68YEEDqKUL?= =?us-ascii?Q?7hD9IurnYcCeqY8RB9cIx7ojtFd3/7s16mb/vkBpYYU01oFrX0j9aEVY1ZEj?= =?us-ascii?Q?pBk1hZStArWcMVIEThAox6z8eyKnBrSGx1Cts39Ttla3h2ExAH/u8r8df68O?= =?us-ascii?Q?aybN4ZwGb2zRRDKZINF2xK42hr2eNYw7V7GNQDORVZDPgoM/AIEkzn/AKVyU?= =?us-ascii?Q?6AUiyD2LGdCmFoKM7SEpf5bbuntQ6bRQFiEBcNAL1pnrF/NarFjAG9dBsQmt?= =?us-ascii?Q?EIayIpaN3AgjhoIelXLXgU/KBrR/Jd67GqKXhMQgJxv1/rk4IofRudmcINGW?= =?us-ascii?Q?nn2hgkW535v3s+LQR7JVUyxRqGRPWzSWDcNmPfuF+J1ox6eKxxB0X2DuVQYW?= =?us-ascii?Q?yGE8QGvnfZZfuzJG79ZN2+sBZo12tdKNI4PpcZmrmGzewrcuCEbWXS1ydIAJ?= =?us-ascii?Q?4rhgSK2uQUh/hvGR+vs82GwVDZyLna5UK4Pf5sZiY8gYN8UKPDn53GfI/cRx?= =?us-ascii?Q?QMCGkkbjhA=3D=3D?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9e501e68-b6e0-43a5-dc78-08df0de857c0 X-MS-Exchange-CrossTenant-AuthSource: CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2026 20:32:46.7453 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e6a32402-7d7b-4830-9a2b-76945bbbcb57 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: efJm8iufArJIqNmzEB0GohRDTdVk62xuroh2Uds/sthCic1m99eVEVbpHqDatyiNQObk1vV7UZ9kaUkTb6pZJQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO6P123MB7126 Content-Type: text/plain; charset="utf-8" To preserve the existing user-space ABI, "module_blacklist=3D" is kept as a legacy alias pointing to the same module_denylist variable. This patch addresses the documentation by marking "module_blacklist=3D" as deprecated in admin-guide/kernel-parameters.txt, and documents the new "module_denylist=3D" parameter. All internal symbols, such as module_is_blacklisted(), have been renamed to use "denylist" and all log messages now use "denylisted". Signed-off-by: Aaron Tomlin --- .../admin-guide/kernel-parameters.txt | 6 +++++- include/linux/module.h | 2 +- init/main.c | 19 ++++++++++--------- kernel/module/main.c | 4 ++-- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentatio= n/admin-guide/kernel-parameters.txt index 68647ff4bdd2..aae1da11a592 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -4232,7 +4232,11 @@ Kernel parameters Note that if CONFIG_MODULE_SIG_FORCE is set, that is always true, so this option does nothing. =20 - module_blacklist=3D [KNL] Do not load a comma-separated list of + module_blacklist=3D [KNL] (deprecated) + This parameter has been renamed to module_denylist=3D. + Please use module_denylist=3D instead. + + module_denylist=3D [KNL] Do not load a comma-separated list of modules. Useful for debugging problem modules. =20 mousedev.tap_time=3D diff --git a/include/linux/module.h b/include/linux/module.h index bcc54edbde7d..39386a18285b 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -879,7 +879,7 @@ static inline void module_for_each_mod(int(*func)(struc= t module *mod, void *data } #endif /* CONFIG_MODULES */ =20 -bool module_is_blacklisted(const char *module_name); +bool module_is_denylisted(const char *module_name); =20 #ifdef CONFIG_SYSFS extern struct kset *module_kset; diff --git a/init/main.c b/init/main.c index accaa8418aa5..8602dce328d7 100644 --- a/init/main.c +++ b/init/main.c @@ -1347,17 +1347,17 @@ static inline void do_trace_initcall_level(const ch= ar *level) extern struct initcall_modname __start_initcall_modnames[]; extern struct initcall_modname __stop_initcall_modnames[]; =20 -/* module_blacklist is a comma-separated list of module names */ -static char *module_blacklist; -bool __init_or_module module_is_blacklisted(const char *module_name) +/* module_denylist is a comma-separated list of module names */ +static char *module_denylist; +bool __init_or_module module_is_denylisted(const char *module_name) { const char *p; size_t len; =20 - if (!module_blacklist) + if (!module_denylist) return false; =20 - for (p =3D module_blacklist; *p; p +=3D len) { + for (p =3D module_denylist; *p; p +=3D len) { len =3D strcspn(p, ","); if (strlen(module_name) =3D=3D len && parameqn(module_name, p, len)) return true; @@ -1366,7 +1366,8 @@ bool __init_or_module module_is_blacklisted(const cha= r *module_name) } return false; } -core_param(module_blacklist, module_blacklist, charp, 0400); +core_param(module_denylist, module_denylist, charp, 0400); +core_param(module_blacklist, module_denylist, charp, 0400); =20 static const char *__init get_builtin_modname(initcall_t fn) { @@ -1383,10 +1384,10 @@ static void __init do_one_initcall_builtin(initcall= _t fn) { const char *modname; =20 - if (module_blacklist) { + if (module_denylist) { modname =3D get_builtin_modname(fn); - if (modname && module_is_blacklisted(modname)) { - pr_info("Skipping initcall for blacklisted built-in module %s\n", + if (modname && module_is_denylisted(modname)) { + pr_info("Skipping initcall for denylisted built-in module %s\n", modname); return; } diff --git a/kernel/module/main.c b/kernel/module/main.c index 0eb5700f9f73..9eb31dccef98 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -3382,8 +3382,8 @@ static int early_mod_check(struct load_info *info, in= t flags) * Now that we know we have the correct module name, check * if it's blacklisted. */ - if (module_is_blacklisted(info->name)) { - pr_err("Module %s is blacklisted\n", info->name); + if (module_is_denylisted(info->name)) { + pr_err("Module %s is denylisted\n", info->name); return -EPERM; } =20 --=20 2.55.0