From nobody Mon Feb 9 12:02:08 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 90387204C00 for ; Sun, 23 Mar 2025 12:29:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742732950; cv=none; b=dMhHNKl9iWZFdQcUiSXO4DqGC5uDnbWO8wMs8PSwwvpijdIFM1BeTV71WynVxt7feAhrmz/PL/27bNRugYTdTcWZ7PBtyW5fn0Is1/RAYhcvVfT6WQ9vwTA3sJo14DMIxiEb2j0JdNssTFAcUiJD+Nujk0xtBXGaZ72THvlRr1k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742732950; c=relaxed/simple; bh=7h63btXGzhfMzbY5uYxN9Me1NcMrRXNldjL3B37vY2k=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=Y42EPJyhmOR/p/4ofTgrIiO1hKgDGRTH/XzuDm3a/mofmH5SywPYXwT3SGbS/g7ylBe4mqpoM7Xtgf1aq3AM/PD1kka/KR/mDxJSpTCNyLK4xgRhT5M0z0Upx69KHz464bHi1OuPcz6kNeI7Q3UtsAAWEqY/dvB0jPixvj517W0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 20AA0C4CEED; Sun, 23 Mar 2025 12:29:10 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.98) (envelope-from ) id 1twKSb-00000001yeG-2DgJ; Sun, 23 Mar 2025 08:29:49 -0400 Message-ID: <20250323122949.379865816@goodmis.org> User-Agent: quilt/0.68 Date: Sun, 23 Mar 2025 08:29:35 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton , Christophe JAILLET Subject: [for-next][PATCH 02/10] tracing: Constify struct event_trigger_ops References: <20250323122933.407277911@goodmis.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Christophe JAILLET 'event_trigger_ops mwifiex_if_ops' are not modified in these drivers. Constifying these structures moves some data to a read-only section, so increase overall security, especially when the structure holds some function pointers. On a x86_64, with allmodconfig, as an example: Before: =3D=3D=3D=3D=3D=3D text data bss dec hex filename 31368 9024 6200 46592 b600 kernel/trace/trace_events_trigger.o After: =3D=3D=3D=3D=3D text data bss dec hex filename 31752 8608 6200 46560 b5e0 kernel/trace/trace_events_trigger.o Cc: Masami Hiramatsu Cc: Mathieu Desnoyers Link: https://lore.kernel.org/66e8f990e649678e4be37d4d1a19158ca0dea2f4.1741= 521295.git.christophe.jaillet@wanadoo.fr Signed-off-by: Christophe JAILLET Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace.h | 4 +-- kernel/trace/trace_eprobe.c | 6 ++--- kernel/trace/trace_events_hist.c | 20 +++++++-------- kernel/trace/trace_events_trigger.c | 38 ++++++++++++++--------------- 4 files changed, 34 insertions(+), 34 deletions(-) diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 9c21ba45b7af..880cf9abc055 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -1714,7 +1714,7 @@ struct event_trigger_data { unsigned long count; int ref; int flags; - struct event_trigger_ops *ops; + const struct event_trigger_ops *ops; struct event_command *cmd_ops; struct event_filter __rcu *filter; char *filter_str; @@ -1959,7 +1959,7 @@ struct event_command { int (*set_filter)(char *filter_str, struct event_trigger_data *data, struct trace_event_file *file); - struct event_trigger_ops *(*get_trigger_ops)(char *cmd, char *param); + const struct event_trigger_ops *(*get_trigger_ops)(char *cmd, char *param= ); }; =20 /** diff --git a/kernel/trace/trace_eprobe.c b/kernel/trace/trace_eprobe.c index 82fd637cfc19..c1cc2fe54887 100644 --- a/kernel/trace/trace_eprobe.c +++ b/kernel/trace/trace_eprobe.c @@ -478,7 +478,7 @@ static void eprobe_trigger_func(struct event_trigger_da= ta *data, __eprobe_trace_func(edata, rec); } =20 -static struct event_trigger_ops eprobe_trigger_ops =3D { +static const struct event_trigger_ops eprobe_trigger_ops =3D { .trigger =3D eprobe_trigger_func, .print =3D eprobe_trigger_print, .init =3D eprobe_trigger_init, @@ -507,8 +507,8 @@ static void eprobe_trigger_unreg_func(char *glob, =20 } =20 -static struct event_trigger_ops *eprobe_trigger_get_ops(char *cmd, - char *param) +static const struct event_trigger_ops *eprobe_trigger_get_ops(char *cmd, + char *param) { return &eprobe_trigger_ops; } diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_h= ist.c index 261163b00137..d3c4880fa8b1 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -6191,7 +6191,7 @@ static void event_hist_trigger_free(struct event_trig= ger_data *data) } } =20 -static struct event_trigger_ops event_hist_trigger_ops =3D { +static const struct event_trigger_ops event_hist_trigger_ops =3D { .trigger =3D event_hist_trigger, .print =3D event_hist_trigger_print, .init =3D event_hist_trigger_init, @@ -6223,15 +6223,15 @@ static void event_hist_trigger_named_free(struct ev= ent_trigger_data *data) } } =20 -static struct event_trigger_ops event_hist_trigger_named_ops =3D { +static const struct event_trigger_ops event_hist_trigger_named_ops =3D { .trigger =3D event_hist_trigger, .print =3D event_hist_trigger_print, .init =3D event_hist_trigger_named_init, .free =3D event_hist_trigger_named_free, }; =20 -static struct event_trigger_ops *event_hist_get_trigger_ops(char *cmd, - char *param) +static const struct event_trigger_ops *event_hist_get_trigger_ops(char *cm= d, + char *param) { return &event_hist_trigger_ops; } @@ -6826,38 +6826,38 @@ hist_enable_count_trigger(struct event_trigger_data= *data, hist_enable_trigger(data, buffer, rec, event); } =20 -static struct event_trigger_ops hist_enable_trigger_ops =3D { +static const struct event_trigger_ops hist_enable_trigger_ops =3D { .trigger =3D hist_enable_trigger, .print =3D event_enable_trigger_print, .init =3D event_trigger_init, .free =3D event_enable_trigger_free, }; =20 -static struct event_trigger_ops hist_enable_count_trigger_ops =3D { +static const struct event_trigger_ops hist_enable_count_trigger_ops =3D { .trigger =3D hist_enable_count_trigger, .print =3D event_enable_trigger_print, .init =3D event_trigger_init, .free =3D event_enable_trigger_free, }; =20 -static struct event_trigger_ops hist_disable_trigger_ops =3D { +static const struct event_trigger_ops hist_disable_trigger_ops =3D { .trigger =3D hist_enable_trigger, .print =3D event_enable_trigger_print, .init =3D event_trigger_init, .free =3D event_enable_trigger_free, }; =20 -static struct event_trigger_ops hist_disable_count_trigger_ops =3D { +static const struct event_trigger_ops hist_disable_count_trigger_ops =3D { .trigger =3D hist_enable_count_trigger, .print =3D event_enable_trigger_print, .init =3D event_trigger_init, .free =3D event_enable_trigger_free, }; =20 -static struct event_trigger_ops * +static const struct event_trigger_ops * hist_enable_get_trigger_ops(char *cmd, char *param) { - struct event_trigger_ops *ops; + const struct event_trigger_ops *ops; bool enable; =20 enable =3D (strcmp(cmd, ENABLE_HIST_STR) =3D=3D 0); diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_event= s_trigger.c index d45448947094..b66b6d235d91 100644 --- a/kernel/trace/trace_events_trigger.c +++ b/kernel/trace/trace_events_trigger.c @@ -825,7 +825,7 @@ struct event_trigger_data *event_trigger_alloc(struct e= vent_command *cmd_ops, void *private_data) { struct event_trigger_data *trigger_data; - struct event_trigger_ops *trigger_ops; + const struct event_trigger_ops *trigger_ops; =20 trigger_ops =3D cmd_ops->get_trigger_ops(cmd, param); =20 @@ -1367,38 +1367,38 @@ traceoff_trigger_print(struct seq_file *m, struct e= vent_trigger_data *data) data->filter_str); } =20 -static struct event_trigger_ops traceon_trigger_ops =3D { +static const struct event_trigger_ops traceon_trigger_ops =3D { .trigger =3D traceon_trigger, .print =3D traceon_trigger_print, .init =3D event_trigger_init, .free =3D event_trigger_free, }; =20 -static struct event_trigger_ops traceon_count_trigger_ops =3D { +static const struct event_trigger_ops traceon_count_trigger_ops =3D { .trigger =3D traceon_count_trigger, .print =3D traceon_trigger_print, .init =3D event_trigger_init, .free =3D event_trigger_free, }; =20 -static struct event_trigger_ops traceoff_trigger_ops =3D { +static const struct event_trigger_ops traceoff_trigger_ops =3D { .trigger =3D traceoff_trigger, .print =3D traceoff_trigger_print, .init =3D event_trigger_init, .free =3D event_trigger_free, }; =20 -static struct event_trigger_ops traceoff_count_trigger_ops =3D { +static const struct event_trigger_ops traceoff_count_trigger_ops =3D { .trigger =3D traceoff_count_trigger, .print =3D traceoff_trigger_print, .init =3D event_trigger_init, .free =3D event_trigger_free, }; =20 -static struct event_trigger_ops * +static const struct event_trigger_ops * onoff_get_trigger_ops(char *cmd, char *param) { - struct event_trigger_ops *ops; + const struct event_trigger_ops *ops; =20 /* we register both traceon and traceoff to this callback */ if (strcmp(cmd, "traceon") =3D=3D 0) @@ -1491,21 +1491,21 @@ snapshot_trigger_print(struct seq_file *m, struct e= vent_trigger_data *data) data->filter_str); } =20 -static struct event_trigger_ops snapshot_trigger_ops =3D { +static const struct event_trigger_ops snapshot_trigger_ops =3D { .trigger =3D snapshot_trigger, .print =3D snapshot_trigger_print, .init =3D event_trigger_init, .free =3D event_trigger_free, }; =20 -static struct event_trigger_ops snapshot_count_trigger_ops =3D { +static const struct event_trigger_ops snapshot_count_trigger_ops =3D { .trigger =3D snapshot_count_trigger, .print =3D snapshot_trigger_print, .init =3D event_trigger_init, .free =3D event_trigger_free, }; =20 -static struct event_trigger_ops * +static const struct event_trigger_ops * snapshot_get_trigger_ops(char *cmd, char *param) { return param ? &snapshot_count_trigger_ops : &snapshot_trigger_ops; @@ -1586,21 +1586,21 @@ stacktrace_trigger_print(struct seq_file *m, struct= event_trigger_data *data) data->filter_str); } =20 -static struct event_trigger_ops stacktrace_trigger_ops =3D { +static const struct event_trigger_ops stacktrace_trigger_ops =3D { .trigger =3D stacktrace_trigger, .print =3D stacktrace_trigger_print, .init =3D event_trigger_init, .free =3D event_trigger_free, }; =20 -static struct event_trigger_ops stacktrace_count_trigger_ops =3D { +static const struct event_trigger_ops stacktrace_count_trigger_ops =3D { .trigger =3D stacktrace_count_trigger, .print =3D stacktrace_trigger_print, .init =3D event_trigger_init, .free =3D event_trigger_free, }; =20 -static struct event_trigger_ops * +static const struct event_trigger_ops * stacktrace_get_trigger_ops(char *cmd, char *param) { return param ? &stacktrace_count_trigger_ops : &stacktrace_trigger_ops; @@ -1711,28 +1711,28 @@ void event_enable_trigger_free(struct event_trigger= _data *data) } } =20 -static struct event_trigger_ops event_enable_trigger_ops =3D { +static const struct event_trigger_ops event_enable_trigger_ops =3D { .trigger =3D event_enable_trigger, .print =3D event_enable_trigger_print, .init =3D event_trigger_init, .free =3D event_enable_trigger_free, }; =20 -static struct event_trigger_ops event_enable_count_trigger_ops =3D { +static const struct event_trigger_ops event_enable_count_trigger_ops =3D { .trigger =3D event_enable_count_trigger, .print =3D event_enable_trigger_print, .init =3D event_trigger_init, .free =3D event_enable_trigger_free, }; =20 -static struct event_trigger_ops event_disable_trigger_ops =3D { +static const struct event_trigger_ops event_disable_trigger_ops =3D { .trigger =3D event_enable_trigger, .print =3D event_enable_trigger_print, .init =3D event_trigger_init, .free =3D event_enable_trigger_free, }; =20 -static struct event_trigger_ops event_disable_count_trigger_ops =3D { +static const struct event_trigger_ops event_disable_count_trigger_ops =3D { .trigger =3D event_enable_count_trigger, .print =3D event_enable_trigger_print, .init =3D event_trigger_init, @@ -1916,10 +1916,10 @@ void event_enable_unregister_trigger(char *glob, data->ops->free(data); } =20 -static struct event_trigger_ops * +static const struct event_trigger_ops * event_enable_get_trigger_ops(char *cmd, char *param) { - struct event_trigger_ops *ops; + const struct event_trigger_ops *ops; bool enable; =20 #ifdef CONFIG_HIST_TRIGGERS --=20 2.47.2