Re: [PATCH -tip v4 10/12] x86/kprobes: Push a fake return address at kretprobe_trampoline
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
- To: Masami Hiramatsu <mhiramat@xxxxxxxxxx>
- Subject: Re: [PATCH -tip v4 10/12] x86/kprobes: Push a fake return address at kretprobe_trampoline
- From: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
- Date: Tue, 23 Mar 2021 23:30:07 +0100
- Cc: Steven Rostedt <rostedt@xxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>, X86 ML <x86@xxxxxxxxxx>, Daniel Xu <dxu@xxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx, bpf@xxxxxxxxxxxxxxx, kuba@xxxxxxxxxx, mingo@xxxxxxxxxx, ast@xxxxxxxxxx, tglx@xxxxxxxxxxxxx, kernel-team@xxxxxx, yhs@xxxxxx, Josh Poimboeuf <jpoimboe@xxxxxxxxxx>, linux-ia64@xxxxxxxxxxxxxxx, Abhishek Sagar <sagar.abhishek@xxxxxxxxx>
- In-reply-to: <161639530062.895304.16962383429668412873.stgit@devnote2>
- References: <161639518354.895304.15627519393073806809.stgit@devnote2> <161639530062.895304.16962383429668412873.stgit@devnote2>
On Mon, Mar 22, 2021 at 03:41:40PM +0900, Masami Hiramatsu wrote:
> ".global kretprobe_trampoline\n"
> ".type kretprobe_trampoline, @function\n"
> "kretprobe_trampoline:\n"
> #ifdef CONFIG_X86_64
So what happens if we get an NMI here? That is, after the RET but before
the push? Then our IP points into the trampoline but we've not done that
push yet.
> + /* Push fake return address to tell the unwinder it's a kretprobe */
> + " pushq $kretprobe_trampoline\n"
> UNWIND_HINT_FUNC
> + /* Save the sp-8, this will be fixed later */
> + " pushq %rsp\n"
> " pushfq\n"
> SAVE_REGS_STRING
> " movq %rsp, %rdi\n"
> " call trampoline_handler\n"
> RESTORE_REGS_STRING
> + " addq $8, %rsp\n"
> " popfq\n"
[Index of Archives]
[Linux Kernel]
[Sparc Linux]
[DCCP]
[Linux ARM]
[Yosemite News]
[Linux SCSI]
[Linux x86_64]
[Linux for Ham Radio]