Message ID | 20190205153740.20942-1-mathieu.desnoyers@efficios.com (mailing list archive) |
---|---|
State | Mainlined, archived |
Commit | 0ac569bf6a7983c0c5747d6df8db9dc05bc92b6c |
Headers | show |
Series | [1/1] Fix: arm: kprobes: optimized kprobes illegal instruction | expand |
On Tue, 5 Feb 2019 10:37:40 -0500 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> wrote: > commit e46daee53bb5 ("ARM: 8806/1: kprobes: Fix false positive with > FORTIFY_SOURCE") introduced a regression in optimized kprobes. It > triggers "invalid instruction" oopses when using kprobes instrumentation > through lttng and perf. This commit was introduced in kernel v4.20, and > has been backported to stable kernels 4.19 and 4.14. > > This crash was also reported by Hongzhi Song on the redhat bugzilla > where the patch was originally introduced. Thank you for fixing this. Acked-by: Masami Hiramatsu <mhiramat@kernel.org> > > Link: https://bugzilla.redhat.com/show_bug.cgi?id=1639397 > Link: https://bugs.lttng.org/issues/1174 > Link: https://lore.kernel.org/lkml/342740659.2887.1549307721609.JavaMail.zimbra@efficios.com > Fixes: e46daee53bb5 ("ARM: 8806/1: kprobes: Fix false positive with FORTIFY_SOURCE") > Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> > Reported-by: Robert Berger <Robert.Berger@ReliableEmbeddedSystems.com> > Tested-by: Robert Berger <Robert.Berger@ReliableEmbeddedSystems.com> > Acked-by: Kees Cook <keescook@chromium.org> > CC: Robert Berger <Robert.Berger@ReliableEmbeddedSystems.com> > CC: Masami Hiramatsu <mhiramat@kernel.org> > CC: William Cohen <wcohen@redhat.com> > CC: Laura Abbott <labbott@redhat.com> > CC: Kees Cook <keescook@chromium.org> > CC: Russell King <rmk+kernel@armlinux.org.uk> > CC: <stable@vger.kernel.org> # v4.14+ > CC: linux-arm-kernel@lists.infradead.org > CC: patches@armlinux.org.uk > --- > KernelVersion: 5.0.0-rc5 > arch/arm/probes/kprobes/opt-arm.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/arm/probes/kprobes/opt-arm.c b/arch/arm/probes/kprobes/opt-arm.c > index 2c118a6ab358..0dc23fc227ed 100644 > --- a/arch/arm/probes/kprobes/opt-arm.c > +++ b/arch/arm/probes/kprobes/opt-arm.c > @@ -247,7 +247,7 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe *op, struct kprobe *or > } > > /* Copy arch-dep-instance from template. */ > - memcpy(code, (unsigned char *)optprobe_template_entry, > + memcpy(code, (unsigned long *)&optprobe_template_entry, > TMPL_END_IDX * sizeof(kprobe_opcode_t)); > > /* Adjust buffer according to instruction. */ > -- > 2.11.0 >
diff --git a/arch/arm/probes/kprobes/opt-arm.c b/arch/arm/probes/kprobes/opt-arm.c index 2c118a6ab358..0dc23fc227ed 100644 --- a/arch/arm/probes/kprobes/opt-arm.c +++ b/arch/arm/probes/kprobes/opt-arm.c @@ -247,7 +247,7 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe *op, struct kprobe *or } /* Copy arch-dep-instance from template. */ - memcpy(code, (unsigned char *)optprobe_template_entry, + memcpy(code, (unsigned long *)&optprobe_template_entry, TMPL_END_IDX * sizeof(kprobe_opcode_t)); /* Adjust buffer according to instruction. */