From: Heiko Carstens Date: Fri, 28 Nov 2014 11:36:48 +0000 (+0100) Subject: s390/kprobes: fix instruction copy for out of line execution X-Git-Tag: v5.15~16720^2~14 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ed7d56e174b11b76e2954f28605c5c16f8814fab;p=platform%2Fkernel%2Flinux-starfive.git s390/kprobes: fix instruction copy for out of line execution When we generate the instruction for out of line execution the length of the to be copied instruction was evaluated from a not initialized memory location. Therefore we ended up with a random (2, 4 or 6) number of bytes being copied instead of taking the real instruction length into account. This works surprisingly well most of the time, but still not always. Reported-by: Ursula Braun Signed-off-by: Heiko Carstens Signed-off-by: Martin Schwidefsky --- diff --git a/arch/s390/kernel/kprobes.c b/arch/s390/kernel/kprobes.c index ee03967..1e4c710 100644 --- a/arch/s390/kernel/kprobes.c +++ b/arch/s390/kernel/kprobes.c @@ -74,7 +74,7 @@ static void copy_instruction(struct kprobe *p) ftrace_generate_nop_insn((struct ftrace_insn *)p->ainsn.insn); p->ainsn.is_ftrace_insn = 1; } else - memcpy(p->ainsn.insn, p->addr, insn_length(p->opcode >> 8)); + memcpy(p->ainsn.insn, p->addr, insn_length(*p->addr >> 8)); p->opcode = p->ainsn.insn[0]; if (!probe_is_insn_relative_long(p->ainsn.insn)) return;