On Fri, Aug 14, 2026 at 09:38:56AM +0000, [email protected] wrote:
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s)
> to consider:
> - [Medium] The newly introduced global function pointer
> `arm64_pre_smp_shutdown_hook` is placed in writable memory without the
> `__ro_after_init` annotation, creating a potential target for control-flow
> hijacking.
> --
>
> --- Patch [1]: [RFC PATCH 1/2] arm64: Add pre-shutdown hook to
> machine_shutdown() ---
> commit 438763f14354dbd91b5fa7bea807c334ada0c642
> Author: Shradha Gupta <[email protected]>
>
> arm64: Add pre-shutdown hook to machine_shutdown()
>
> This patch introduces a global function pointer invoked from
> machine_shutdown() to allow platform-specific cleanup before secondary CPUs
> go offline during kexec or reboot.
>
> [ ... ]
>
> > diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
> > index 581f80e9b9b73..41c0e98409138 100644
> > --- a/arch/arm64/kernel/process.c
> > +++ b/arch/arm64/kernel/process.c
> > @@ -88,8 +88,21 @@ void __noreturn arch_cpu_idle_dead(void)
>
> [ ... ]
>
> > +/*
> > + * Hook for platform code to perform cleanup after device_shutdown()
> > + * but before secondary CPUs are offlined. This runs in the kexec path
> > + * from kernel_kexec() after device_shutdown() and cpu_hotplug_enable()
> > + * have been called, matching the point at which x86 invokes
> > + * machine_ops.shutdown.
> > + */
> > +void (*arm64_pre_smp_shutdown_hook)(void);
>
> [Severity: Medium]
> Should this global function pointer be annotated with __ro_after_init?
>
> Without it, the pointer resides in writable memory, which could make it a
> reliable target for control-flow hijacking if an arbitrary memory write
> primitive is obtained elsewhere. Since the hook is presumably only set once
> during platform initialization, making it read-only after init would improve
> defense-in-depth on the shutdown/reboot path.
>
The pointer is assigned when the VMBus kexec handler is registered and
cleared when it is removed, so it cannot be __ro_after_init.
In v1 though, I will use WRITE_ONCE() when publishing/clearing the
callback
and READ_ONCE() before invoking it, preventing compiler refetching of
the pointer.
Regards,
Shradha
> > +
> > void machine_shutdown(void)
> > {
> > + if (arm64_pre_smp_shutdown_hook)
> > + arm64_pre_smp_shutdown_hook();
> > +
> > smp_shutdown_nonboot_cpus(reboot_cpu);
> > }
>
> --
> Sashiko AI review ยท
> https://sashiko.dev/#/patchset/[email protected]?part=1