On Tue, 2 Jun 2026 16:54:08 +0300 Eva Kurchatova <[email protected]> wrote:
> When multiple callbacks are registered on the same tracepoint, > callbacks will be indirectly called via traceiter helper. > > Pointers to __probestub_* callbacks reside in __tracepoints section, > which is excluded from ENDBR checks in objtool, causing objtool to > assume those functions are never indirectly called. > > Registering multiple callbacks using sched_wakeup test will result > in #CP exception due to missing ENDBR in __probestub_sched_wakeup > on a CFI-enabled machine. > > Fix this by adding CFI_NOSEAL annotation to probestub declaration. > Thanks, this looks good to me. Acked-by: Masami Hiramatsu (Google) <[email protected]> > Fixes: d5173f753750 ("objtool: Exclude __tracepoints data from ENDBR checks") > Signed-off-by: Eva Kurchatova <[email protected]> > --- > include/linux/tracepoint.h | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h > index 763eea4d80d8..38e9f49a71b7 100644 > --- a/include/linux/tracepoint.h > +++ b/include/linux/tracepoint.h > @@ -20,6 +20,7 @@ > #include <linux/rcupdate_trace.h> > #include <linux/tracepoint-defs.h> > #include <linux/static_call.h> > +#include <asm/cfi.h> > > struct module; > struct tracepoint; > @@ -389,6 +390,13 @@ static inline struct tracepoint > *tracepoint_ptr_deref(tracepoint_ptr_t *p) > void __probestub_##_name(void *__data, proto) \ > { \ > } \ > + /* \ > + * Annotate the probestub 'CFI_NOSEAL' to stop objtool from \ > + * requesting the kernel remove the ENDBR, because the only \ > + * references to the function are in the __tracepoint section, \ > + * that objtool doesn't scan. \ > + */ \ > + CFI_NOSEAL(__probestub_##_name); \ > DEFINE_STATIC_CALL(tp_func_##_name, __traceiter_##_name); \ > DEFINE_RUST_DO_TRACE(_name, TP_PROTO(proto), TP_ARGS(args)) > > -- > 2.54.0 > -- Masami Hiramatsu (Google) <[email protected]>
