[PATCH v4 2/5] powerpc/code-patching: Add data patch alignment check
Hari Bathini
hbathini at linux.ibm.com
Tue Aug 20 17:03:27 AEST 2024
On 15/05/24 8:14 am, Benjamin Gray wrote:
> The new data patching still needs to be aligned within a
> cacheline too for the flushes to work correctly. To simplify
> this requirement, we just say data patches must be aligned.
>
> Detect when data patching is not aligned, returning an invalid
> argument error.
>
> Signed-off-by: Benjamin Gray <bgray at linux.ibm.com>
Reviewed-by: Hari Bathini <hbathini at linux.ibm.com>
>
> ---
>
> v3: * New in v3
> ---
> arch/powerpc/include/asm/code-patching.h | 6 ++++++
> arch/powerpc/lib/code-patching.c | 6 ++++++
> 2 files changed, 12 insertions(+)
>
> diff --git a/arch/powerpc/include/asm/code-patching.h b/arch/powerpc/include/asm/code-patching.h
> index 21a36e2c4e26..e7f14720f630 100644
> --- a/arch/powerpc/include/asm/code-patching.h
> +++ b/arch/powerpc/include/asm/code-patching.h
> @@ -95,11 +95,17 @@ int patch_ulong(void *addr, unsigned long val);
>
> static inline int patch_uint(void *addr, unsigned int val)
> {
> + if (!IS_ALIGNED((unsigned long)addr, sizeof(unsigned int)))
> + return -EINVAL;
> +
> return patch_instruction(addr, ppc_inst(val));
> }
>
> static inline int patch_ulong(void *addr, unsigned long val)
> {
> + if (!IS_ALIGNED((unsigned long)addr, sizeof(unsigned long)))
> + return -EINVAL;
> +
> return patch_instruction(addr, ppc_inst(val));
> }
>
> diff --git a/arch/powerpc/lib/code-patching.c b/arch/powerpc/lib/code-patching.c
> index 18f762616db9..384b275d1bc5 100644
> --- a/arch/powerpc/lib/code-patching.c
> +++ b/arch/powerpc/lib/code-patching.c
> @@ -386,12 +386,18 @@ NOKPROBE_SYMBOL(patch_instruction);
>
> int patch_uint(void *addr, unsigned int val)
> {
> + if (!IS_ALIGNED((unsigned long)addr, sizeof(unsigned int)))
> + return -EINVAL;
> +
> return patch_mem(addr, val, false);
> }
> NOKPROBE_SYMBOL(patch_uint);
>
> int patch_ulong(void *addr, unsigned long val)
> {
> + if (!IS_ALIGNED((unsigned long)addr, sizeof(unsigned long)))
> + return -EINVAL;
> +
> return patch_mem(addr, val, true);
> }
> NOKPROBE_SYMBOL(patch_ulong);
More information about the Linuxppc-dev
mailing list