Message ID | 20240223-perjury-preshow-fc2cf73d552e@spud (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Conor Dooley |
Headers | show |
Series | RISC-V: enable rust | expand |
Context | Check | Description |
---|---|---|
conchuod/vmtest-fixes-PR | fail | merge-conflict |
On Fri, Feb 23, 2024 at 2:38 PM Conor Dooley <conor@kernel.org> wrote: > > configuring a kernel without symmetrical support for kfi. Nit: typo. > This probably needs to go to stable. The correct fixes tag for that I am > not sure of however, but since CFI_CLANG predates RUST, I blamed the > commit adding rust support. Cc'ing Matthew et al. in case this is a problem for them, but I guess we can relax it later as needed. Cheers, Miguel
On Fri, Feb 23, 2024 at 03:45:10PM +0100, Miguel Ojeda wrote: > On Fri, Feb 23, 2024 at 2:38 PM Conor Dooley <conor@kernel.org> wrote: > > > > configuring a kernel without symmetrical support for kfi. > > Nit: typo. > > > This probably needs to go to stable. The correct fixes tag for that I am > > not sure of however, but since CFI_CLANG predates RUST, I blamed the > > commit adding rust support. > > Cc'ing Matthew et al. in case this is a problem for them, but I guess > we can relax it later as needed. I suspect that nobody has actually sat down and tried it. I did try to test it but I ran into too many toolchain issues - my older copies of LLVM (pre 17) are not multiarch as I built them by hand with PGO for x86 and RISC-V. My LLVM 17 is from kernel.org and has no libclang. And then the copy of LLVM 18 on kernel.org apparently does not support kcfi at all. I gave up there, but I don't see how this would not be a problem on other arches, given rustc never gets told to enable kcfi. Cheers, Conor.
On Tue, Feb 27, 2024 at 11:54 AM Conor Dooley <conor.dooley@microchip.com> wrote: > > I did try to test it but I ran into too many toolchain issues - my > older copies of LLVM (pre 17) are not multiarch as I built them by hand > with PGO for x86 and RISC-V. My LLVM 17 is from kernel.org and has no > libclang. And then the copy of LLVM 18 on kernel.org apparently does not > support kcfi at all. I gave up there, but I don't see how this would not I asked Nathan to add libclang a few days ago, and he very quickly did it for LLVM 18 -- though I don't know the plan for the others. I just pinged in that thread. Cheers, Miguel
On Tue, Feb 27, 2024 at 01:34:14PM +0100, Miguel Ojeda wrote: > On Tue, Feb 27, 2024 at 11:54 AM Conor Dooley > <conor.dooley@microchip.com> wrote: > > > > I did try to test it but I ran into too many toolchain issues - my > > older copies of LLVM (pre 17) are not multiarch as I built them by hand > > with PGO for x86 and RISC-V. My LLVM 17 is from kernel.org and has no > > libclang. And then the copy of LLVM 18 on kernel.org apparently does not > > support kcfi at all. I gave up there, but I don't see how this would not > > I asked Nathan to add libclang a few days ago, and he very quickly did > it for LLVM 18 -- though I don't know the plan for the others. I just > pinged in that thread. I had actually said it to him on IRC already (although he is CCed here) but I just noticed that this was my fault - I symlinked incorrectly after downloading the toolchain. kcfi is detected fine with llvm18. I'll give testing another try.
On Tue, Feb 27, 2024 at 01:02:17PM +0000, Conor Dooley wrote:
> I'll give testing another try.
Yah, it is (as expected) broken on arm64 too:
CFI failure at do_one_initcall+0xec/0x26c (target: __rust_minimal_init+0x0/0x64; expected type: 0x36b1c5a6)
Internal error: Oops - CFI: 00000000f2008233 [#1] PREEMPT SMP
Modules linked in:
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.8.0-rc3-00002-g724a75ac9542 #10
Hardware name: linux,dummy-virt (DT)
pstate: a0000005 (NzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
pc : do_one_initcall+0xec/0x26c
lr : do_initcall_level+0x8c/0xb0
sp : ffff80008000bab0
x29: ffff80008000bda0 x28: 0000000000000000 x27: 0000000000000000
x26: 0000000000000000 x25: 0000000000000000 x24: 0000000000000000
x23: 0000000000000000 x22: 0000000000000000 x21: ffff18d941cb0000
x20: ffffb8f6d6d9f000 x19: ffffb8f6d63e8b18 x18: 0000000000000002
x17: 0000000036b1c5a6 x16: 00000000d65f03c0 x15: 0000000000000000
x14: ffff18d9420280b1 x13: 0000000065dde380 x12: 0000000000000017
x11: 0000000000000000 x10: 0000000000000000 x9 : d4db8c0058e7e300
x8 : 0000000000000000 x7 : 0000000001f4c18b x6 : 0000000001f4c18b
x5 : ffffb8f6d6d300a0 x4 : ffff80008000ba78 x3 : ffff18d942019860
x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffffb8f6d63e8b18
Call trace:
do_one_initcall+0xec/0x26c
do_initcall_level+0x8c/0xb0
do_initcalls+0x54/0x94
do_basic_setup+0x68/0x78
kernel_init_freeable+0x100/0x16c
kernel_init+0x20/0x1a0
ret_from_fork+0x10/0x20
Code: 7298b4d1 72a6d631 6b11021f 54000040 (d4304660)
---[ end trace 0000000000000000 ]---
note: swapper/0[1] exited with irqs disabled
note: swapper/0[1] exited with preempt_count 1
Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
Kernel Offset: 0x38f655800000 from 0xffff800080000000
PHYS_OFFSET: 0xffffe72700000000
CPU features: 0x0,88000203,3c020000,0100421b
Memory Limit: none
---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b ]---
Cheers,
Conor.
diff --git a/init/Kconfig b/init/Kconfig index 8d4e836e1b6b..6cf05824859e 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -1895,6 +1895,7 @@ config RUST bool "Rust support" depends on HAVE_RUST depends on RUST_IS_AVAILABLE + depends on !CFI_CLANG depends on !MODVERSIONS depends on !GCC_PLUGINS depends on !RANDSTRUCT