[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Y07AEa7A73f1nDL1@hirez.programming.kicks-ass.net>
Date: Tue, 18 Oct 2022 17:02:41 +0200
From: Peter Zijlstra <peterz@...radead.org>
To: Steven Rostedt <rostedt@...dmis.org>
Cc: x86@...nel.org, linux-kernel@...r.kernel.org,
Mark Rutland <mark.rutland@....com>,
Kees Cook <keescook@...omium.org>,
Sami Tolvanen <samitolvanen@...gle.com>
Subject: Re: [PATCH] ftrace,kcfi: Separate ftrace_stub() and
ftrace_stub_graph()
On Tue, Oct 18, 2022 at 10:21:00AM -0400, Steven Rostedt wrote:
> On Tue, 18 Oct 2022 14:35:15 +0200
> Peter Zijlstra <peterz@...radead.org> wrote:
>
> > Different function signatures means they needs to be different
> > functions; otherwise CFI gets upset.
>
> This is due to this commit:
>
> commit b83b43ffc6e4b514ca034a0fbdee01322e2f7022
> Author: Steven Rostedt (VMware) <rostedt@...dmis.org>
> Date: Tue Oct 15 09:00:55 2019 -0400
>
> fgraph: Fix function type mismatches of ftrace_graph_return using ftrace_stub
>
> The C compiler is allowing more checks to make sure that function pointers
> are assigned to the correct prototype function. Unfortunately, the function
> graph tracer uses a special name with its assigned ftrace_graph_return
> function pointer that maps to a stub function used by the function tracer
> (ftrace_stub). The ftrace_graph_return variable is compared to the
> ftrace_stub in some archs to know if the function graph tracer is enabled or
> not. This means we can not just simply create a new function stub that
> compares it without modifying all the archs.
>
> Instead, have the linker script create a function_graph_stub that maps to
> ftrace_stub, and this way we can define the prototype for it to match the
> prototype of ftrace_graph_return, and make the compiler checks all happy!
>
>
> Perhaps its time to just modify all the archs and get rid of that hack.
Ideally yes, but given kCFI is in Linus' tree now, I didn't feel like
fixing up all archs in a hurry.
Mark mentioned that most archs can probably move to a common empty C
function for each stub.
Powered by blists - more mailing lists