Re: [PATCH] rust: cfi: disable function merging if CFI is enabled
"Gary Guo" <[email protected]>
| Newsgroups | org.kernel.vger.rust-for-linux,dev.linux.lists.llvm,org.kernel.vger.linux-kbuild,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On Thu Aug 20, 2026 at 2:57 PM BST, Gary Guo wrote: > From: Gary Guo <[email protected]> > > In Rust doc tests, there is a dummy `__module_firmware_test_init` function > generated by the example in `module_firmware!`'s documentation, which just > returns zero. Many other documentation generates function that produces > zero. LKP test robot reports a `Flags::zeroed` instance; my local > reproduction has a `Bounded::new::<0>`. > > LLVM's MergeFunctionsPass incorrectly merge functions with the same KCFI This should read "with different KCFI type" (obviously). Best, Gary > type, causing `__module_firmware_test_init` being merged into one of the > zero-returning function. As module init is invoked via indirect function > call, KCFI is checked and this produces a KCFI failure. > > I've reported this bug to upstream LLVM [1]; in the mean time, disable > function merging if CFI is enabled. No separate treatment is needed for > CONFIG_RUST_INLINE_HELPERS, as Clang does not enable function merging by > default. > > Reported-by: kernel test robot <[email protected]> > Closes: https://lore.kernel.org/oe-lkp/[email protected] > Link: https://github.com/llvm/llvm-project/issues/217629 [1] > Signed-off-by: Gary Guo <[email protected]> > --- > Makefile | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/Makefile b/Makefile > index 4fee5ee9e9f4..0dd9a6eda739 100644 > --- a/Makefile > +++ b/Makefile > @@ -1118,7 +1118,8 @@ endif > ifdef CONFIG_RUST > # Always pass -Zsanitizer-cfi-normalize-integers as CONFIG_RUST selects > # CONFIG_CFI_ICALL_NORMALIZE_INTEGERS. > - RUSTC_FLAGS_CFI := -Zsanitizer=kcfi -Zsanitizer-cfi-normalize-integers > + # Disable function merging as LLVM incorrectly merge functions with the same KCFI type. > + RUSTC_FLAGS_CFI := -Zsanitizer=kcfi -Zsanitizer-cfi-normalize-integers -Zmerge-functions=disabled > KBUILD_RUSTFLAGS += $(RUSTC_FLAGS_CFI) > export RUSTC_FLAGS_CFI > endif > > base-commit: e6664f2b33db9b6811eb4cec109f06cb2b4f458d