Probes fixes for 6.7-rc8:
- Kprobes/x86: Fix to emulate indirect call which size is not 5 byte. Current code expects the indirect call instructions are 5 bytes, but that is incorrect. Usually indirect call based on register is shorter than that, thus the emulation causes a kernel crash by accessing wrong instruction boundary. This uses the instruction size to calculate the return address correctly. -----BEGIN PGP SIGNATURE----- iQFPBAABCgA5FiEEh7BulGwFlgAOi5DV2/sHvwUrPxsFAmWWxCIbHG1hc2FtaS5o aXJhbWF0c3VAZ21haWwuY29tAAoJENv7B78FKz8brzYH+wZnk8UnJk8VmCp+BFwf kHfzDruVLnsjiehMPIniu/DUoDpwZnUw3/uFWzMEnH0y14GfTgS5D0m1ctybtpnR PgUeWSRI0XAxOXhExJLGd+/29V2E1FAjpR2kQx/U5hObzUtDNR2n0zLGO4qcJq0a laNXnkc5OgkZ9KAcJp2dT4WNsUFalRUbr4PmeVUSxYxmI1L1/+Q74vyGywRBgqkB lENLCbzubhp9T4pLBmCrDoRRPshjr/TYPRYvEJ5gEH9c+KuVOdZXa6Drr1Y5sADe zsycxjPi2ETxJtMCf67IzBjNbYn/wGLg2u00FtRdt+JK6p0I+Wgm+cKb6ifPDLPN PXU= =CmiU -----END PGP SIGNATURE----- Merge tag 'probes-fixes-v6.7-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace Pull kprobes/x86 fix from Masami Hiramatsu: - Fix to emulate indirect call which size is not 5 byte. Current code expects the indirect call instructions are 5 bytes, but that is incorrect. Usually indirect call based on register is shorter than that, thus the emulation causes a kernel crash by accessing wrong instruction boundary. This uses the instruction size to calculate the return address correctly. * tag 'probes-fixes-v6.7-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace: x86/kprobes: fix incorrect return address calculation in kprobe_emulate_call_indirect
This commit is contained in:
commit
7131c2e9bb
@ -576,7 +576,8 @@ static void kprobe_emulate_call_indirect(struct kprobe *p, struct pt_regs *regs)
|
||||
{
|
||||
unsigned long offs = addrmode_regoffs[p->ainsn.indirect.reg];
|
||||
|
||||
int3_emulate_call(regs, regs_get_register(regs, offs));
|
||||
int3_emulate_push(regs, regs->ip - INT3_INSN_SIZE + p->ainsn.size);
|
||||
int3_emulate_jmp(regs, regs_get_register(regs, offs));
|
||||
}
|
||||
NOKPROBE_SYMBOL(kprobe_emulate_call_indirect);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user