Re: [PATCH v5] ARM: imx: Fix suspend/resume crash with Clang CFI
From: Sami Tolvanen
Date: Tue Sep 01 2026 - 16:24:03 EST
On Sun, Aug 30, 2026 at 8:51 AM Yo'av Moshe <linux@xxxxxxxxxxxxx> wrote:
>
> The suspend code that runs from OCRAM is copied there with fncpy(),
> which does not copy the kCFI type hash preceding the function. With
> CONFIG_CFI=y the indirect call through imx6_suspend_in_ocram_fn
> therefore panics.
>
> Keep the call covered by CFI instead of exempting it:
>
> - Add SYM_TYPED_FUNC_START_ALIGNED(), a variant of
> SYM_TYPED_FUNC_START() that aligns the function entry rather than
> the type hash preceding it, and use it to declare imx6_suspend():
> fncpy() requires the entry point of the function it copies to be
> 8-byte aligned. The macro lives in arch/arm/include/asm/linkage.h
> since the requirement comes from arm's fncpy().
>
> - Add a cfi_type member at the end of struct imx6_cpu_pm_info, which
> directly precedes the OCRAM copy of the function. It fits in the
> struct's tail padding, so no sizes or offsets change. Fill it using
> cfi_get_func_hash(), putting the hash where the caller's CFI check
> expects it: four bytes before the function entry.
>
> Also mark ccm_base, suspend_ocram_base and imx6_suspend_in_ocram_fn
> as __ro_after_init: they are only written during __init, and the
> function pointer in particular should not be writable afterwards.
>
> Suggested-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Yo'av Moshe <linux@xxxxxxxxxxxxx>
Reviewed-by: Sami Tolvanen <samitolvanen@xxxxxxxxxx>
Sami