Message ID | 20240325055302.876434-1-bgray@linux.ibm.com (mailing list archive) |
---|---|
Headers | show |
Series | Add generic data patching functions | expand |
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@kernel.org> Thanks for working on this. - Naveen