[PATCH v3 0/5] Add generic data patching functions
Naveen N Rao
naveen at kernel.org
Tue Apr 23 19:40:44 AEST 2024
On Mon, Mar 25, 2024 at 04:52:57PM +1100, Benjamin Gray wrote:
> Currently patch_instruction() bases the write length on the value being
> written. If the value looks like a prefixed instruction it writes 8 bytes,
> otherwise it writes 4 bytes. This makes it potentially buggy to use for
> writing arbitrary data, as if you want to write 4 bytes but it decides to
> write 8 bytes it may clobber the following memory or be unaligned and
> trigger an oops if it tries to cross a page boundary.
>
> To solve this, this series pulls out the size parameter to the 'top' of
> the memory patching logic, and propagates it through the various functions.
>
> The two sizes supported are int and long; this allows for patching
> instructions and pointers on both ppc32 and ppc64. On ppc32 these are the
> same size, so care is taken to only use the size parameter on static
> functions, so the compiler can optimise it out entirely. Unfortunately
> GCC trips over its own feet here and won't optimise in a way that is
> optimal for strict RWX (mpc85xx_smp_defconfig) and no RWX
> (pmac32_defconfig). More details in the v2 cover letter.
>
> Changes from v2:
> * Various changes noted on each patch
> * Data patching now enforced to be aligned
> * Restore page aligned flushing optimisation
>
> Changes from v1:
> * Addressed the v1 review actions
> * Removed noinline (for now)
>
> v2: https://patchwork.ozlabs.org/project/linuxppc-dev/cover/20231016050147.115686-1-bgray@linux.ibm.com/
> v1: https://patchwork.ozlabs.org/project/linuxppc-dev/cover/20230207015643.590684-1-bgray@linux.ibm.com/
>
> Benjamin Gray (5):
> powerpc/code-patching: Add generic memory patching
> powerpc/code-patching: Add data patch alignment check
> powerpc/64: Convert patch_instruction() to patch_u32()
> powerpc/32: Convert patch_instruction() to patch_uint()
> powerpc/code-patching: Add boot selftest for data patching
>
> arch/powerpc/include/asm/code-patching.h | 37 +++++++++++++
> arch/powerpc/kernel/module_64.c | 5 +-
> arch/powerpc/kernel/static_call.c | 2 +-
> arch/powerpc/lib/code-patching.c | 70 +++++++++++++++++++-----
> arch/powerpc/lib/test-code-patching.c | 36 ++++++++++++
> arch/powerpc/platforms/powermac/smp.c | 2 +-
> 6 files changed, 132 insertions(+), 20 deletions(-)
Apart from the minor comments, for this series:
Acked-by: Naveen N Rao <naveen at kernel.org>
Thanks for working on this.
- Naveen
More information about the Linuxppc-dev
mailing list