Without CONFIG_STRICT_KERNEL_RWX this boils down to doing the same thing (although with a few more safety checks along the way), and with CONFIG_STRICT_KERNEL_RWX this should make it actually work (although perhaps there was some other mechanism that made it work anyway).
Reviewed-by: Alistair Popple <alist...@popple.id.au> On Friday, 1 May 2020 1:42:07 PM AEST Jordan Niethe wrote: > Instead of using memcpy() and flush_icache_range() use > patch_instruction() which not only accomplishes both of these steps but > will also make it easier to add support for prefixed instructions. > > Signed-off-by: Jordan Niethe <jniet...@gmail.com> > --- > v6: New to series. > --- > arch/powerpc/kernel/kprobes.c | 5 +---- > 1 file changed, 1 insertion(+), 4 deletions(-) > > diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c > index f64312dca84f..a72c8e1a42ad 100644 > --- a/arch/powerpc/kernel/kprobes.c > +++ b/arch/powerpc/kernel/kprobes.c > @@ -125,11 +125,8 @@ int arch_prepare_kprobe(struct kprobe *p) > } > > if (!ret) { > - memcpy(p->ainsn.insn, p->addr, > - MAX_INSN_SIZE * sizeof(kprobe_opcode_t)); > + patch_instruction((struct ppc_inst *)p->ainsn.insn, insn); > p->opcode = ppc_inst_val(insn); > - flush_icache_range((unsigned long)p->ainsn.insn, > - (unsigned long)p->ainsn.insn + sizeof(kprobe_opcode_t)); > } > > p->ainsn.boostable = 0;