[PATCH v5] ARM: imx: Fix suspend/resume crash with Clang CFI
Sami Tolvanen
samitolvanen at google.com
Tue Sep 1 12:39:36 PDT 2026
On Sun, Aug 30, 2026 at 8:51 AM Yo'av Moshe <linux at yoavmoshe.com> 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 at google.com>
> Cc: stable at vger.kernel.org
> Signed-off-by: Yo'av Moshe <linux at yoavmoshe.com>
Reviewed-by: Sami Tolvanen <samitolvanen at google.com>
Sami
More information about the linux-arm-kernel
mailing list