From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=pass header.oldest-pass=0 smtp.remote-ip=100.103.45.18 ARC-Seal: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=pass; t=1793140170; b=qgasH/GKdxLURQ8xzZ+JRjQNcx5SvW2STcISl22oe9O8esxEYjl0lS4L7e8QHnH065K5 tzCym3J9GZFuHiN7peG0h/OwfsGkcvqr0prgVChE+nOxosMETbXt/lhAdzRqlxMGVbDLp QEXRTK3784Wbe65313cs612syZEO9FPVsEqdWg7H9KV9QEhzUSnFMpaz+khrSWNLuoz1n ULmCE3O9VtO39J5c3bXlvg085Ddl70V7iNo4pvkI7xDk4sbXE6klBLfuM12Zo/uDcQImR 68Gy3zNl3KQXlwzBatFLDpUZx7cVqcjtCCPmohOdG8cTVsxGw0ehGH4CpjEDfpXezyw== ARC-Message-Signature: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793140170; h=Received:DKIM-Signature:Received:From:Date:Subject:MIME-Version: Content-Type:Message-Id:X-B4-Tracking:X-Change-ID:To:Cc:X-Mailer: X-Developer-Signature:X-Developer-Key:X-Endpoint-Received: X-Original-From:Reply-To:Content-Transfer-Encoding; bh=BTq7gwM4UUjUNsaagWtNQITr0gTEM8STP6VyWZ/jCrU=; b=Q18/DlpBvwaRv4w+QW93YqvXoSP//csv3Nx3td93GV+aoN76kOuw57QMOXc/R/Pw1Ccr kx8tD+dJei67YgizeCdgSpBKs7IroKkotiH9ENcTJjGpRGKMXGYNQfesWY0sjn2HdpSlN 1umV3QxpLavZ8XLmsloID3YPEw1/BXhU+wmpAd4NYqopgYBYiDeZ8CM9P+ocueCnUSEFl U8IpXeHNTOJMTZU/My1unvwvF4F2YiAPui7UpUDLldTL+9Ub5q32FIjyQ6rI0beykoMV8 EBmUFyirDKvljXfRxDJcu3N5xZIX2AuJYdkPAMC2BvM2Abyni5e1g/Q/N/r+6aJDKyw== ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dkim=pass header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=Lda0oYKo; arc=pass header.oldest-pass=0 smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 81E75606A31D; Tue, 27 Oct 2026 22:29:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=Lda0oYKo Authentication-Results: smtp.kernel.org; arc=none smtp.remote-ip=100.80.115.77 ARC-Seal: i=1; d=kernel.org; s=arc20260519; a=rsa-sha256; cv=none; t=1793140170; b=QRKD8mr662oH+WfeCsOOyDPkEuEM9gtKIA/Kc3W0fpwrLBaKJlVNcMfZANCDw4P8RBe7 1Brr1bZ6rvTHIjTJ/qBvZtd5qwiBGPQ/kxDBR43qrx0Xm3DzthiISeT2KzfWysh8zPx5h ml4XAyFMWepDh/2rY1WMEuzKd8jpkaON87ZxJ7Y4iTpRE67tSpo13TKebetWT9v1MDqzF MfR+PdLTwxpUZYq3ViQYNFTY97VVR1Ftm8Gu2mojyAhUYv/yRcEPMKHkyOVDRHnto5AYc K6p+az67ZFgLMSff6WuMa1H3nZdDWs01c+fc6oXUicCzncEGMxdYPi5asvLdgQ3WrIA== ARC-Message-Signature: i=1; d=kernel.org; s=arc20260519; a=rsa-sha256; c=relaxed/relaxed; t=1793140170; h=DKIM-Signature:Received:From:Date:Subject:MIME-Version:Content-Type: Message-Id:X-B4-Tracking:X-Change-ID:To:Cc:X-Mailer: X-Developer-Signature:X-Developer-Key:X-Endpoint-Received: X-Original-From:Reply-To:Content-Transfer-Encoding; bh=BTq7gwM4UUjUNsaagWtNQITr0gTEM8STP6VyWZ/jCrU=; b=tgNIY1IiwYp8qCND+zfHQAImqIzKxc5lyabyww0RXKLWQKqAeFHdDoyOANvr/LfbyHra f1FWggJp6m+iiHs4p69xaIyTNORjzThJ+mj8EOqI+xDDQK307YWuPxL+1e9myFICovuT1 4t/1SlmJHshbYA5+Y7nWpJNPJGO/hdNdp1fiVC7oezNkADNmn9lqG99JK3H2QPG74FoaD pdXjLZx0IzrlUH2wnlNDKHDGFzHnjCvR1FCrNpNq+nmxMy7DVIeOvaxDBdRnZAsH1JYPI nW9Rq+KhkXy+5z3qY6iZLobcmDJZ7RJwA2eVpe+9brcy5OuqNTgN55OSvwX1+JIvPIQ== ARC-Authentication-Results: i=1; smtp.kernel.org; arc=none smtp.remote-ip=100.80.115.77 Received: from lkml.kernel.org (nexus.subspace.kernel.org [100.80.115.77]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.kernel.org (Postfix) with ESMTPS id 459E61F01825; Tue, 27 Oct 2026 22:29:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793140170; bh=BTq7gwM4UUjUNsaagWtNQITr0gTEM8STP6VyWZ/jCrU=; h=From:Date:Subject:To:Cc:Reply-To; b=Lda0oYKo0qJXuEvsALaPmYE+8M1YlLyZ1K9AyECvtZFEXnRvk5SmFFVKxx9gC1x1j Cu59RWiCECWiwC1i0xClCNmMLj5EmR77GjIczSxRuOqHUW+FXPOSj6FfULwWmrj+VA 8oUArtkftoZAHLgkjzvUbK6pWRFFmhaffmfbicxaX9F1Bp8tqulG0ge3Mcl8HCBqZt lExo8KfAeOPhcIp3J7i9K1fPdIszTwqI/CZvMO9sfEwuVrWMtFZz/u9p0JvEvoceDN vl9cU755gadyVe1YIO1LX8wPasOmliJpo596m1zkV3Fk0Sn/AgnPxF6mcaHffPh/pT APKAAG/WHwXyw== Received: from nexus.subspace.kernel.org (localhost [IPv6:::1]) by lkml.kernel.org (Postfix) with ESMTP id 99753452B9; Tue, 27 Oct 2026 22:29:28 +0000 (UTC) From: Ridge Lomont via B4 Relay Date: Tue, 27 Oct 2026 15:29:21 -0700 Subject: [PATCH v2] x86/kcfi: Don't emit KCFI_REFERENCE() in modules X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Message-Id: <20261027-kcfi-reference-modules-v2-1-3a3247f15806@proton.me> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/4WNQQ6CMBBFr0Jm7Zi2VIyuvIdhUcsgo9KSthAN4 e4WPIDLl7z//gyRAlOEczFDoIkje5dB7QqwnXF3Qm4ygxKqkkJpfNqWMVBLgZwl7H0zviii0LZ UQmjTagl5PGSF31v4Wv84jrcH2bTWVqPjmHz4bM+TXL2/J5NEibq0ymhzoupwvAzBJ+/2PUG9L MsXINswks4AAAA= X-Change-ID: 20261024-kcfi-reference-modules-04c32004af41 To: x86@kernel.org, Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , Chris Li , Nick Desaulniers , Bill Wendling , Justin Stitt Cc: "H. Peter Anvin" , Peter Zijlstra , Nathan Chancellor , Sami Tolvanen , Kees Cook , llvm@lists.linux.dev, linux-kernel@vger.kernel.org, linux-sparse@vger.kernel.org, Ridge Lomont X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1793140168; l=4583; i=cyridge@proton.me; s=20261025; h=from:subject:message-id; bh=OQJeHIflLTXu8GG/soe5gJtL1JN4lbjLzWGutcYzYdg=; b=6F9puhQ8giJgHtu2O11XOMl3gX9kmfChhfvdlW1snl0do298NDHav1MNEv1s4gxln4pPHnqpX fFSoz5RncMyBEr/G0tGtiNgwPwfHc2yfiDKs5l+daJQ8Rg6y32rWe10 X-Developer-Key: i=cyridge@proton.me; a=ed25519; pk=vUzN9FERlHN1g72uX883qK0g48rf4ZgAQ82J2Aieyyo= X-Endpoint-Received: by B4 Relay for cyridge@proton.me/20261025 with auth_id=1315 X-Original-From: Ridge Lomont Reply-To: cyridge@proton.me Content-Transfer-Encoding: 7bit From: Ridge Lomont KCFI_REFERENCE() takes the address of a symbol so that the compiler emits its __kcfi_typeid_ symbol, which the SYM_TYPED_FUNC_START() assembly implementing it needs. It is used from arch/x86 headers for __clear_pages_unrolled(), copy_page(), __memset() and __memmove(), and all of that assembly is built into vmlinux. Modules include the same headers, so with CONFIG_CFI=y every module also gets an __ADDRESSABLE() reference to each of these symbols in .discard.addressable. This serves no purpose there, and since __clear_pages_unrolled() is EXPORT_SYMBOL_GPL, modpost now rejects any GPL-incompatible module that includes : ERROR: modpost: GPL-incompatible module repro.ko uses GPL-only symbol '__clear_pages_unrolled' even though the module never uses the symbol. This makes OpenZFS impossible to build against CFI kernels; its configure checks fail in the same way and are misreported as CONFIG_DEBUG_LOCK_ALLOC. scripts/module.lds.S does not help here: modpost checks .o before the final link, and even after it the discarded section only loses its relocations, the undefined symbols stay in .symtab, where the module loader resolves them with the same license check. Only emit the reference when building vmlinux. Tested on x86_64 with clang 23.1.3 and CONFIG_CFI=y, with both CONFIG_LTO_CLANG_FULL=y (the configuration from the Fixes: commit) and CONFIG_LTO_CLANG_THIN=y: vmlinux links without warnings and still contains __kcfi_typeid___clear_pages_unrolled, __kcfi_typeid_copy_page, __kcfi_typeid___memset and __kcfi_typeid___memmove. It boots in QEMU with no CFI failures. A minimal module with MODULE_LICENSE("Proprietary") including fails modpost before this change and builds and loads after it. OpenZFS builds against a CFI kernel with this change, and its pool, encryption, checksum and send/recv operations run without CFI failures, in QEMU and on a desktop with CFI enforcing. Fixes: 9b041a4b66b3 ("x86/mm: Ensure clear_page() variants always have __kcfi_typeid_ symbols") Link: https://github.com/openzfs/zfs/issues/18092 Assisted-by: LLM Signed-off-by: Ridge Lomont Acked-by: Nathan Chancellor --- Notes for reviewers: - The fix was found and written with an AI coding assistant (Claude Opus 5.5, Claude Code). It started from "CONFIG_CFI breaks OpenZFS"; the assistant traced that to the modpost failure, wrote this change, and ran the tests described in the changelog. I have reviewed it and take responsibility for it. - An alternative would be wrapping the KCFI_REFERENCE() lines in arch/x86/include/asm/page_64.h in #ifndef MODULE, as suggested in the OpenZFS report; doing it in the macro covers all users. - Only x86_64 was tested; it is the only architecture using KCFI_REFERENCE(). Tested with CONFIG_LTO_CLANG_FULL=y and CONFIG_LTO_CLANG_THIN=y on this tree and with LTO disabled on v7.3. In-tree modules were built but not loaded. - checkpatch reports "Non-standard signature: Assisted-by:", which conflicts with Documentation/process/coding-assistants.rst. --- Changes in v2: - Sign off with my real name (Peter, Borislav). - Explain in the changelog why module.lds.S discarding .discard.addressable does not help (Nathan). - Also tested with CONFIG_LTO_CLANG_THIN=y. - Add Nathan's Acked-by. - Link to v1: https://patch.msgid.link/20261024-kcfi-reference-modules-v1-1-43c2a4a9e657@proton.me --- include/linux/compiler.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/include/linux/compiler.h b/include/linux/compiler.h index 0ea7150db..ea161a72d 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h @@ -258,10 +258,13 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val, #endif /* __KERNEL__ */ -#if defined(CONFIG_CFI) && !defined(__DISABLE_EXPORTS) && !defined(BUILD_VDSO) +#if defined(CONFIG_CFI) && !defined(__DISABLE_EXPORTS) && !defined(BUILD_VDSO) && \ + !defined(MODULE) /* * Force a reference to the external symbol so the compiler generates - * __kcfi_typid. + * __kcfi_typid. Only vmlinux needs it, as that is where the assembly + * using the typeid lives; in a module it would only add a reference to + * the symbol, which fails modpost if the symbol is GPL-only. */ #define KCFI_REFERENCE(sym) __ADDRESSABLE(sym) #else --- base-commit: 6fba331225f5040e93d0947d1027e9712238291f change-id: 20261024-kcfi-reference-modules-04c32004af41 Best regards, -- Ridge