All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] x86/Kconfig: make CFI_AUTO_DEFAULT depend on !RUST
@ 2025-04-10 11:54 Paweł Anikiel
  2025-04-10 12:36 ` Peter Zijlstra
  0 siblings, 1 reply; 45+ messages in thread
From: Paweł Anikiel @ 2025-04-10 11:54 UTC (permalink / raw)
  To: Peter Zijlstra, Sami Tolvanen, Kees Cook
  Cc: Alex Gaynor, Borislav Petkov, Dave Hansen, Ingo Molnar,
	Josh Poimboeuf, Masahiro Yamada, Miguel Ojeda, Thomas Gleixner,
	Alice Ryhl, Nathan Chancellor, x86, linux-kernel, rust-for-linux,
	Paweł Anikiel

Calling core::fmt::write() from rust code while FineIBT is enabled
results in a kernel panic:

[ 4614.199779] kernel BUG at arch/x86/kernel/cet.c:132!
[ 4614.205343] Oops: invalid opcode: 0000 [#1] PREEMPT SMP NOPTI
[ 4614.211781] CPU: 2 UID: 0 PID: 6057 Comm: dmabuf_dump Tainted: G     U     O       6.12.17-android16-0-g6ab38c534a43 #1 9da040f27673ec3945e23b998a0f8bd64c846599
[ 4614.227832] Tainted: [U]=USER, [O]=OOT_MODULE
[ 4614.241247] RIP: 0010:do_kernel_cp_fault+0xea/0xf0
[ 4614.246621] Code: c6 15 8d ad ac 48 0f 44 f1 48 8d 04 80 48 8d 14 45 d0 37 42 ac 48 c7 c7 22 99 bb ac e8 9f 7a 05 00 0f 0b eb 9a 67 0f b9 40 12 <0f> 0b cc cc cc cc 66 0f 1f 00 41 81 ea 00 00 00 00 74 03 0f 0b 90
[ 4614.267606] RSP: 0018:ffffb95acfa4b978 EFLAGS: 00010097
[ 4614.273464] RAX: 0000000000000057 RBX: ffffb95acfa4b9b8 RCX: 3ff1c813cb576300
[ 4614.281426] RDX: ffff9a50b792b8d0 RSI: ffff9a50b791d548 RDI: ffff9a50b791d548
[ 4614.289408] RBP: ffffb95acfa4b980 R08: 0000000000000d7c R09: ffffffffad45d500
[ 4614.297399] R10: 0000000000002874 R11: 0000000000000004 R12: 0000000000000000
[ 4614.305369] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000003
[ 4614.313345] FS:  000076fa106dcfe8(0000) GS:ffff9a50b7900000(0000) knlGS:0000000000000000
[ 4614.322386] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 4614.328806] CR2: 000076f8fc207bd0 CR3: 0000000227242000 CR4: 0000000000f52eb0
[ 4614.336777] PKRU: 55555554
[ 4614.339786] Call Trace:
[ 4614.342524]  <TASK>
[ 4614.344867]  ? __die_body+0x69/0xb0
[ 4614.348786]  ? die+0xa9/0xd0
[ 4614.352000]  ? do_trap+0x89/0x160
[ 4614.355721]  ? do_kernel_cp_fault+0xea/0xf0
[ 4614.360413]  ? handle_invalid_op+0x69/0x90
[ 4614.364985]  ? do_kernel_cp_fault+0xea/0xf0
[ 4614.369654]  ? exc_invalid_op+0x36/0x60
[ 4614.373959]  ? asm_exc_invalid_op+0x1f/0x30
[ 4614.378643]  ? do_kernel_cp_fault+0xea/0xf0
[ 4614.383335]  ? do_kernel_cp_fault+0x31/0xf0
[ 4614.388005]  exc_control_protection+0x49/0x70
[ 4614.392871]  asm_exc_control_protection+0x2b/0x60
[ 4614.398144] RIP: 0010:_RNvXs5_NtNtNtCs3o2tGsuHyou_4core3fmt3num3impyNtB9_7Display3fmt+0x0/0x20
[ 4614.407792] Code: 48 f7 df 48 0f 48 f9 48 89 f2 89 c6 5d e9 18 fd ff ff 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 41 81 ea 14 61 af 2c 74 03 0f 0b 90 <66> 0f 1f 00 55 48 89 e5 48 89 f2 48 8b 3f be 01 00 00 00 5d e9 e7
[ 4614.428775] RSP: 0018:ffffb95acfa4ba68 EFLAGS: 00010246
[ 4614.434609] RAX: 0000000000000000 RBX: 0000000000000010 RCX: 0000000000000000
[ 4614.442587] RDX: 0000000000000007 RSI: ffffb95acfa4ba70 RDI: ffffb95acfa4bc88
[ 4614.450557] RBP: ffffb95acfa4bae0 R08: ffff0a00ffffff05 R09: 0000000000000070
[ 4614.458527] R10: 0000000000000000 R11: ffffffffab67eaf0 R12: ffffb95acfa4bcc8
[ 4614.466493] R13: ffffffffac5d50f0 R14: 0000000000000000 R15: 0000000000000000
[ 4614.474473]  ? __cfi__RNvXs5_NtNtNtCs3o2tGsuHyou_4core3fmt3num3impyNtB9_7Display3fmt+0x10/0x10
[ 4614.484118]  ? _RNvNtCs3o2tGsuHyou_4core3fmt5write+0x1d2/0x250

This happens because core::fmt::write() calls
core::fmt::rt::Argument::fmt(), which currently has CFI disabled:

library/core/src/fmt/rt.rs:
171     // FIXME: Transmuting formatter in new and indirectly branching to/calling
172     // it here is an explicit CFI violation.
173     #[allow(inline_no_sanitize)]
174     #[no_sanitize(cfi, kcfi)]
175     #[inline]
176     pub(super) unsafe fn fmt(&self, f: &mut Formatter<'_>) -> Result {

This causes a Control Protection exception, because FineIBT has sealed
off the original function's endbr64.

This makes rust currently incompatible with FineIBT. Add a Kconfig
dependency that prevents FineIBT from getting turned on by default
if rust is enabled.

Signed-off-by: Paweł Anikiel <panikiel@google.com>
---
 arch/x86/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 4b9f378e05f6..b31811a92286 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -2367,7 +2367,7 @@ config STRICT_SIGALTSTACK_SIZE
 
 config CFI_AUTO_DEFAULT
 	bool "Attempt to use FineIBT by default at boot time"
-	depends on FINEIBT
+	depends on FINEIBT && !RUST
 	default y
 	help
 	  Attempt to use FineIBT by default at boot time. If enabled,
-- 
2.49.0.504.g3bcea36a83-goog


^ permalink raw reply related	[flat|nested] 45+ messages in thread

end of thread, other threads:[~2025-05-09 19:33 UTC | newest]

Thread overview: 45+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-10 11:54 [PATCH] x86/Kconfig: make CFI_AUTO_DEFAULT depend on !RUST Paweł Anikiel
2025-04-10 12:36 ` Peter Zijlstra
2025-04-10 12:45   ` Peter Zijlstra
2025-04-10 13:09     ` Peter Zijlstra
2025-04-10 13:18       ` Paweł Anikiel
2025-04-10 13:20       ` Alice Ryhl
2025-04-10 13:21       ` Miguel Ojeda
2025-04-10 13:26         ` Peter Zijlstra
2025-04-10 13:27           ` Miguel Ojeda
2025-04-10 13:34             ` Peter Zijlstra
2025-04-10 13:54               ` Miguel Ojeda
2025-04-10 13:57                 ` Peter Zijlstra
2025-04-10 14:05                   ` Miguel Ojeda
2025-04-10 14:15                     ` Peter Zijlstra
2025-04-10 15:04                       ` Alice Ryhl
2025-04-10 13:59               ` Alice Ryhl
2025-04-10 14:08                 ` Peter Zijlstra
2025-04-10 14:54                   ` Miguel Ojeda
2025-04-10 15:14                     ` Peter Zijlstra
2025-04-10 18:01                       ` Miguel Ojeda
2025-04-10 15:02                   ` Alice Ryhl
2025-04-15 15:15                 ` Miguel Ojeda
2025-04-16 10:38                   ` Alice Ryhl
2025-04-16 20:20                   ` Peter Zijlstra
2025-04-16 21:51                     ` Kees Cook
2025-04-17  8:18                       ` Peter Zijlstra
2025-04-17 18:40                         ` Miguel Ojeda
2025-04-18  9:45                           ` Peter Zijlstra
2025-05-06 22:19                           ` Miguel Ojeda
2025-05-09  8:46                             ` Alice Ryhl
2025-05-09  9:04                               ` Miguel Ojeda
2025-05-09  9:11                                 ` Paweł Anikiel
2025-05-09  9:39                                   ` Alice Ryhl
2025-05-09 16:34                                     ` Kees Cook
2025-05-09 19:33                                   ` Miguel Ojeda
2025-04-10 13:12     ` Paweł Anikiel
2025-04-10 13:25       ` Peter Zijlstra
2025-04-10 15:45         ` [PATCH] objtool: Detect __nocfi calls Peter Zijlstra
2025-04-10 19:09           ` Josh Poimboeuf
2025-04-11  6:46             ` Peter Zijlstra
2025-04-10 19:32           ` Miguel Ojeda
2025-04-10 19:43           ` Sami Tolvanen
2025-04-11  6:44             ` Peter Zijlstra
2025-04-12 12:31               ` Peter Zijlstra
2025-04-10 13:50       ` [PATCH] x86/Kconfig: make CFI_AUTO_DEFAULT depend on !RUST Miguel Ojeda

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.