From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EC28CC6FD1C for ; Thu, 23 Mar 2023 16:26:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231334AbjCWQ04 (ORCPT ); Thu, 23 Mar 2023 12:26:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36458 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231537AbjCWQ0z (ORCPT ); Thu, 23 Mar 2023 12:26:55 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3CEAE2706 for ; Thu, 23 Mar 2023 09:26:53 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id CC96B627D5 for ; Thu, 23 Mar 2023 16:26:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A6EF9C433D2; Thu, 23 Mar 2023 16:26:51 +0000 (UTC) Date: Thu, 23 Mar 2023 12:26:50 -0400 From: Steven Rostedt To: Mark Rutland Cc: linux-kernel@vger.kernel.org, mhiramat@kernel.org, "Jose E. Marchesi" , Nick Desaulniers Subject: Re: [PATCH] tracepoint: Fix CFI failures with tp_stub_func Message-ID: <20230323122650.5a1f2db7@gandalf.local.home> In-Reply-To: <20230323085321.0f8d1b98@gandalf.local.home> References: <20230323114012.2162285-1-mark.rutland@arm.com> <20230323085321.0f8d1b98@gandalf.local.home> X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 23 Mar 2023 08:53:21 -0400 Steven Rostedt wrote: > > --- a/include/linux/tracepoint.h > > +++ b/include/linux/tracepoint.h > > @@ -303,6 +303,7 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p) > > __section("__tracepoints_strings") = #_name; \ > > extern struct static_call_key STATIC_CALL_KEY(tp_func_##_name); \ > > int __traceiter_##_name(void *__data, proto); \ > > + void __tracestub_##_name(void *, proto); \ > > struct tracepoint __tracepoint_##_name __used \ > > __section("__tracepoints") = { \ > > .name = __tpstrtab_##_name, \ > > @@ -310,6 +311,7 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p) > > .static_call_key = &STATIC_CALL_KEY(tp_func_##_name), \ > > .static_call_tramp = STATIC_CALL_TRAMP_ADDR(tp_func_##_name), \ > > .iterator = &__traceiter_##_name, \ > > + .stub = &__tracestub_##_name, \ > > .regfunc = _reg, \ > > .unregfunc = _unreg, \ > > .funcs = NULL }; \ > > @@ -330,6 +332,9 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p) > > } \ > > return 0; \ > > } \ > > + void __tracestub_##_name(void *__data, proto) \ > > + { \ > > + } \ > > I purposely did not do this because this adds over a thousand stub > functions! It adds one for *every* tracepoint (and that is a superset of > trace events). And the commit that added this code: befe6d946551 ("tracepoint: Do not fail unregistering a probe due to memory failure") Has this in the change log: [ Note, this version does use undefined compiler behavior (assuming that a stub function with no parameters or return, can be called by a location that thinks it has parameters but still no return value. Static calls do the same thing, so this trick is not without precedent. There's another solution that uses RCU tricks and is more complex, but can be an alternative if this solution becomes an issue. Link: https://lore.kernel.org/lkml/20210127170721.58bce7cc@gandalf.local.home/ ] -- Steve