[PATCH v7 15/28] powerpc/kprobes: Use patch_instruction()
Alistair Popple
alistair at popple.id.au
Tue May 5 11:41:36 AEST 2020
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 <alistair at 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 <jniethe5 at 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;
More information about the Linuxppc-dev
mailing list