From: Peter Zijlstra <peterz@infradead.org>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: linux-kernel@vger.kernel.org, tglx@linutronix.de,
jpoimboe@redhat.com, x86@kernel.org, mhiramat@kernel.org,
mbenes@suse.cz, jthierry@redhat.com,
alexandre.chartre@oracle.com
Subject: Re: [PATCH 3/3] x86/ftrace: Do not jump to direct code in created trampolines
Date: Wed, 22 Apr 2020 22:08:08 +0200 [thread overview]
Message-ID: <20200422200808.GX2483@worktop.programming.kicks-ass.net> (raw)
In-Reply-To: <20200422162750.638839749@goodmis.org>
On Wed, Apr 22, 2020 at 12:25:42PM -0400, Steven Rostedt wrote:
> @@ -367,6 +371,17 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
> if (WARN_ON(ret < 0))
> goto fail;
>
> + /* No need to test direct calls on created trampolines */
> + if (ops->flags & FTRACE_OPS_FL_SAVE_REGS) {
> + /* NOP the jnz 1f; but make sure it's a 2 byte jnz */
> + ip = trampoline + (jmp_offset - start_offset);
> + if (WARN_ON(*(char *)ip != 0x75))
> + goto fail;
> + ret = probe_kernel_read(ip, ideal_nops[2], 2);
Now you're just being silly, are you really, actually worried you can't
read ideal_nops[] ?
> + if (ret < 0)
> + goto fail;
> + }
> +
> /*
> * The address of the ftrace_ops that is used for this trampoline
> * is stored at the end of the trampoline. This will be used to
> diff --git a/arch/x86/kernel/ftrace_64.S b/arch/x86/kernel/ftrace_64.S
> index 0882758d165a..f72ef157feb3 100644
> --- a/arch/x86/kernel/ftrace_64.S
> +++ b/arch/x86/kernel/ftrace_64.S
> @@ -241,6 +241,7 @@ SYM_INNER_LABEL(ftrace_regs_call, SYM_L_GLOBAL)
> */
> movq ORIG_RAX(%rsp), %rax
> testq %rax, %rax
> +SYM_INNER_LABEL(ftrace_regs_caller_jmp, SYM_L_GLOBAL)
> jnz 1f
>
I you worry about performance, it would make more sense to do something
like so:
SYM_INNER_LABEL(ftrace_regs_caller_from, SYM_L_GLOBAL)
movq ORIG_RAX(%rsp), %rax
testq %rax, %rax
jnz 1f
SYM_INNER_LABEL(ftrace_regs_caller_to, SYM_L_GLOBAL)
if (ops->flags & FTRACE_OPS_FL_SAVE_REGS) {
ip = trampoline + (ftrace_regs_caller_from - start_offset);
((u8[])ip)[0] = JMP8_INSN_OPCODE;
((u8[])ip)[1] = ftrace_regs_caller_to - ftrace_regs_caller_from - JMP8_INSN_SIZE;
}
Or nop the whole range, but it's like 10 bytes so I'm not sure that's
actually faster.
next prev parent reply other threads:[~2020-04-22 20:08 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-22 16:25 [PATCH 0/3] x86/ftrace: Make created trampolines not call direct code Steven Rostedt
2020-04-22 16:25 ` [PATCH 1/3] x86/ftrace: Make non direct case the default in ftrace_regs_caller Steven Rostedt
2020-04-22 16:25 ` [PATCH 2/3] x86/ftrace: Only have the builtin ftrace_regs_caller call direct hooks Steven Rostedt
2020-04-22 16:25 ` [PATCH 3/3] x86/ftrace: Do not jump to direct code in created trampolines Steven Rostedt
2020-04-22 20:08 ` Peter Zijlstra [this message]
2020-04-22 20:17 ` Steven Rostedt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200422200808.GX2483@worktop.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=alexandre.chartre@oracle.com \
--cc=jpoimboe@redhat.com \
--cc=jthierry@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mbenes@suse.cz \
--cc=mhiramat@kernel.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.