Re: [PATCH v3] ARM: imx: Fix suspend/resume crash with Clang CFI
Nathan Chancellor <[email protected]> Tue, 21 Jul 2026 11:09:50 -0700
| Newsgroups | dev.linux.lists.llvm,dev.linux.lists.imx,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel,org.kernel.vger.stable |
|---|---|
| Message-ID | <20260721180950.GA3684684@ax162> |
On Tue, Jul 21, 2026 at 07:29:50AM +0200, Yo'av Moshe wrote: > On 2026-07-20 9:29 PM, Sami Tolvanen wrote: > > Would it be possible to just copy the 4-byte CFI hash prefix to OCRAM > > when relocating the function? If not, the __nocfi approach seems > > reasonable to me. > > > > Sami > > I gave this a try - I tried copying 4 bytes from before imx6_suspend > into OCRAM, but when I tested it on physical hardware (Kobo Clara HD), > it still crashed on suspend. > > I suspect it's because imx6_suspend is written in assembly > (suspend-imx6.S) rather than C, so Clang doesn't emit a CFI hash prefix > before it in the first place. Does using SYM_TYPED_FUNC_START for imx6_suspend() make that work? Something like this builds fine for me and I see __kcfi_typeid_imx6_suspend generated by Clang. diff --git a/arch/arm/mach-imx/suspend-imx6.S b/arch/arm/mach-imx/suspend-imx6.S index 63ccc2d0e920..6ded29a38c99 100644 --- a/arch/arm/mach-imx/suspend-imx6.S +++ b/arch/arm/mach-imx/suspend-imx6.S @@ -3,6 +3,7 @@ * Copyright 2014 Freescale Semiconductor, Inc. */ +#include <linux/cfi_types.h> #include <linux/linkage.h> #include <asm/assembler.h> #include <asm/asm-offsets.h> @@ -148,7 +149,7 @@ .endm -ENTRY(imx6_suspend) +SYM_TYPED_FUNC_START(imx6_suspend) ldr r1, [r0, #PM_INFO_PBASE_OFFSET] ldr r2, [r0, #PM_INFO_RESUME_ADDR_OFFSET] ldr r3, [r0, #PM_INFO_DDR_TYPE_OFFSET] @@ -329,4 +330,4 @@ resume: resume_mmdc ret lr -ENDPROC(imx6_suspend) +SYM_FUNC_END(imx6_suspend) -- Cheers, Nathan