File tree Expand file tree Collapse file tree 5 files changed +17
-2
lines changed Expand file tree Collapse file tree 5 files changed +17
-2
lines changed Original file line number Diff line number Diff line change @@ -976,8 +976,19 @@ export CC_FLAGS_LTO
976976endif
977977
978978ifdef CONFIG_CFI_CLANG
979- CC_FLAGS_CFI := -fsanitize=kcfi
980- KBUILD_CFLAGS += $(CC_FLAGS_CFI )
979+ CC_FLAGS_CFI := -fsanitize=kcfi
980+ ifdef CONFIG_RUST
981+ # If Rust is enabled, this flag is required to support cross-language
982+ # integer types.
983+ # This addresses the problem that on e.g. i686, int != long, and Rust
984+ # maps both to i32.
985+ # See https://rcvalle.com/docs/rust-cfi-design-doc.pdf for details.
986+ CC_FLAGS_CFI += -fsanitize-cfi-icall-experimental-normalize-integers
987+ RS_FLAGS_CFI := -Zsanitizer=kcfi -Zsanitizer-cfi-normalize-integers
988+ KBUILD_RSFLAGS += RS_FLAGS_CFI
989+ export RS_FLAGS_CFI
990+ endif
991+ KBUILD_CFLAGS += $(CC_FLAGS_CFI )
981992export CC_FLAGS_CFI
982993endif
983994
Original file line number Diff line number Diff line change @@ -81,6 +81,7 @@ ifeq ($(CONFIG_X86_KERNEL_IBT),y)
8181# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104816
8282#
8383KBUILD_CFLAGS += $(call cc-option,-fcf-protection=branch -fno-jump-tables)
84+ KBUILD_RUSTFLAGS += -Zcf-protection=branch -Zno-jump-tables
8485else
8586KBUILD_CFLAGS += $(call cc-option,-fcf-protection=none)
8687endif
Original file line number Diff line number Diff line change @@ -1889,6 +1889,7 @@ config RUST
18891889 depends on !GCC_PLUGINS
18901890 depends on !RANDSTRUCT
18911891 depends on !DEBUG_INFO_BTF || PAHOLE_HAS_LANG_EXCLUDE
1892+ depends on !CFI_CLANG || $(cc-option,-fsanitize=kcfi,-fsanitize-cfi-icall-experimental-normalize-integers)
18921893 select CONSTRUCTORS
18931894 help
18941895 Enables Rust support in the kernel.
Original file line number Diff line number Diff line change @@ -365,6 +365,7 @@ quiet_cmd_exports = EXPORTS $@
365365 cmd_exports = \
366366 $(NM ) -p --defined-only $< \
367367 | grep -E ' (T|R|D) ' | cut -d ' ' -f 3 \
368+ | grep -v ^__cfi \
368369 | xargs -Isymbol \
369370 echo 'EXPORT_SYMBOL_RUST_GPL(symbol);' > $@
370371
Original file line number Diff line number Diff line change @@ -179,6 +179,7 @@ fn main() {
179179 }
180180 ts. push ( "features" , features) ;
181181 ts. push ( "llvm-target" , "x86_64-linux-gnu" ) ;
182+ ts. push ( "supported-sanitizers" , [ "kcfi" ] ) ;
182183 ts. push ( "target-pointer-width" , "64" ) ;
183184 } else {
184185 panic ! ( "Unsupported architecture" ) ;
You can’t perform that action at this time.
0 commit comments