mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-04-14 04:27:33 +07:00
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 <ursula.braun@de.ibm.com> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
57f2ffe14f
commit
ed7d56e174
@ -74,7 +74,7 @@ static void copy_instruction(struct kprobe *p)
|
|||||||
ftrace_generate_nop_insn((struct ftrace_insn *)p->ainsn.insn);
|
ftrace_generate_nop_insn((struct ftrace_insn *)p->ainsn.insn);
|
||||||
p->ainsn.is_ftrace_insn = 1;
|
p->ainsn.is_ftrace_insn = 1;
|
||||||
} else
|
} 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];
|
p->opcode = p->ainsn.insn[0];
|
||||||
if (!probe_is_insn_relative_long(p->ainsn.insn))
|
if (!probe_is_insn_relative_long(p->ainsn.insn))
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user