Re: [tip: x86/asm] x86/asm/ftrace: Mark function_hook as function

From: Steven Rostedt
Date: Fri Oct 18 2019 - 12:48:05 EST


On Fri, 18 Oct 2019 16:30:27 -0000
"tip-bot2 for Jiri Slaby" <tip-bot2@xxxxxxxxxxxxx> wrote:

> The following commit has been merged into the x86/asm branch of tip:
>
> Commit-ID: f13ad88a984e8090226a8f62d75e87b770eefdf4
> Gitweb: https://git.kernel.org/tip/f13ad88a984e8090226a8f62d75e87b770eefdf4
> Author: Jiri Slaby <jslaby@xxxxxxx>
> AuthorDate: Fri, 11 Oct 2019 13:51:01 +02:00
> Committer: Borislav Petkov <bp@xxxxxxx>
> CommitterDate: Fri, 18 Oct 2019 11:35:41 +02:00

I just noticed this (sorry missed the original patch).

>
> x86/asm/ftrace: Mark function_hook as function
>
> Relabel function_hook to be marked really as a function. It is called
> from C and has the same expectations towards the stack etc.

This is wrong, function_hook is never called from C. It's called via
fentry (use to be mcount), and does not have the same semantics as a C
function. In fact, that's why it exists in assembly. Because it has to
save and restore registers to make it possible to call a C function!

-- Steve


>
> Signed-off-by: Jiri Slaby <jslaby@xxxxxxx>
> Signed-off-by: Borislav Petkov <bp@xxxxxxx>
> Cc: "H. Peter Anvin" <hpa@xxxxxxxxx>
> Cc: Ingo Molnar <mingo@xxxxxxxxxx>
> Cc: Josh Poimboeuf <jpoimboe@xxxxxxxxxx>
> Cc: linux-arch@xxxxxxxxxxxxxxx
> Cc: Masami Hiramatsu <mhiramat@xxxxxxxxxx>
> Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
> Cc: "Steven Rostedt (VMware)" <rostedt@xxxxxxxxxxx>
> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Cc: x86-ml <x86@xxxxxxxxxx>
> Link: https://lkml.kernel.org/r/20191011115108.12392-22-jslaby@xxxxxxx
> ---
> arch/x86/kernel/ftrace_32.S | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/kernel/ftrace_32.S b/arch/x86/kernel/ftrace_32.S
> index e0061dc..219be13 100644
> --- a/arch/x86/kernel/ftrace_32.S
> +++ b/arch/x86/kernel/ftrace_32.S
> @@ -21,9 +21,9 @@ EXPORT_SYMBOL(__fentry__)
> # define MCOUNT_FRAME 0 /* using frame = false */
> #endif
>
> -ENTRY(function_hook)
> +SYM_FUNC_START(function_hook)
> ret
> -END(function_hook)
> +SYM_FUNC_END(function_hook)
>
> ENTRY(ftrace_caller)
>