tracing: Constify struct event_trigger_ops
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Sun, 9 Mar 2025 11:56:06 +0000 (12:56 +0100)
committerSteven Rostedt (Google) <rostedt@goodmis.org>
Thu, 20 Mar 2025 11:04:00 +0000 (07:04 -0400)
'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:
======
   text    data     bss     dec     hex filename
  31368    9024    6200   46592    b600 kernel/trace/trace_events_trigger.o

After:
=====
   text    data     bss     dec     hex filename
  31752    8608    6200   46560    b5e0 kernel/trace/trace_events_trigger.o

Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Link: https://lore.kernel.org/66e8f990e649678e4be37d4d1a19158ca0dea2f4.1741521295.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
kernel/trace/trace.h
kernel/trace/trace_eprobe.c
kernel/trace/trace_events_hist.c
kernel/trace/trace_events_trigger.c

index 9c21ba45b7af6bdbe6dce2732e38c929e54834cc..880cf9abc0555e9430278501821516e7f5fa33e8 100644 (file)
@@ -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);
 };
 
 /**
index 82fd637cfc19eae447e8a7cb056f717d4407d5eb..c1cc2fe548879efa1e5e7519c6179a01bdd0c4b8 100644 (file)
@@ -478,7 +478,7 @@ static void eprobe_trigger_func(struct event_trigger_data *data,
        __eprobe_trace_func(edata, rec);
 }
 
-static struct event_trigger_ops eprobe_trigger_ops = {
+static const struct event_trigger_ops eprobe_trigger_ops = {
        .trigger                = eprobe_trigger_func,
        .print                  = eprobe_trigger_print,
        .init                   = eprobe_trigger_init,
@@ -507,8 +507,8 @@ static void eprobe_trigger_unreg_func(char *glob,
 
 }
 
-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;
 }
index 261163b00137a5dad75cb91ca4e661e0243a5c9a..d3c4880fa8b1772c668d1187e764d91adfed1511 100644 (file)
@@ -6191,7 +6191,7 @@ static void event_hist_trigger_free(struct event_trigger_data *data)
        }
 }
 
-static struct event_trigger_ops event_hist_trigger_ops = {
+static const struct event_trigger_ops event_hist_trigger_ops = {
        .trigger                = event_hist_trigger,
        .print                  = event_hist_trigger_print,
        .init                   = event_hist_trigger_init,
@@ -6223,15 +6223,15 @@ static void event_hist_trigger_named_free(struct event_trigger_data *data)
        }
 }
 
-static struct event_trigger_ops event_hist_trigger_named_ops = {
+static const struct event_trigger_ops event_hist_trigger_named_ops = {
        .trigger                = event_hist_trigger,
        .print                  = event_hist_trigger_print,
        .init                   = event_hist_trigger_named_init,
        .free                   = event_hist_trigger_named_free,
 };
 
-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 *cmd,
+                                                                 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);
 }
 
-static struct event_trigger_ops hist_enable_trigger_ops = {
+static const struct event_trigger_ops hist_enable_trigger_ops = {
        .trigger                = hist_enable_trigger,
        .print                  = event_enable_trigger_print,
        .init                   = event_trigger_init,
        .free                   = event_enable_trigger_free,
 };
 
-static struct event_trigger_ops hist_enable_count_trigger_ops = {
+static const struct event_trigger_ops hist_enable_count_trigger_ops = {
        .trigger                = hist_enable_count_trigger,
        .print                  = event_enable_trigger_print,
        .init                   = event_trigger_init,
        .free                   = event_enable_trigger_free,
 };
 
-static struct event_trigger_ops hist_disable_trigger_ops = {
+static const struct event_trigger_ops hist_disable_trigger_ops = {
        .trigger                = hist_enable_trigger,
        .print                  = event_enable_trigger_print,
        .init                   = event_trigger_init,
        .free                   = event_enable_trigger_free,
 };
 
-static struct event_trigger_ops hist_disable_count_trigger_ops = {
+static const struct event_trigger_ops hist_disable_count_trigger_ops = {
        .trigger                = hist_enable_count_trigger,
        .print                  = event_enable_trigger_print,
        .init                   = event_trigger_init,
        .free                   = event_enable_trigger_free,
 };
 
-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;
 
        enable = (strcmp(cmd, ENABLE_HIST_STR) == 0);
index d454489470946499df48294f161e670fac3d097f..b66b6d235d9130c49ed1c02ad280baa7e30de667 100644 (file)
@@ -825,7 +825,7 @@ struct event_trigger_data *event_trigger_alloc(struct event_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;
 
        trigger_ops = cmd_ops->get_trigger_ops(cmd, param);
 
@@ -1367,38 +1367,38 @@ traceoff_trigger_print(struct seq_file *m, struct event_trigger_data *data)
                                   data->filter_str);
 }
 
-static struct event_trigger_ops traceon_trigger_ops = {
+static const struct event_trigger_ops traceon_trigger_ops = {
        .trigger                = traceon_trigger,
        .print                  = traceon_trigger_print,
        .init                   = event_trigger_init,
        .free                   = event_trigger_free,
 };
 
-static struct event_trigger_ops traceon_count_trigger_ops = {
+static const struct event_trigger_ops traceon_count_trigger_ops = {
        .trigger                = traceon_count_trigger,
        .print                  = traceon_trigger_print,
        .init                   = event_trigger_init,
        .free                   = event_trigger_free,
 };
 
-static struct event_trigger_ops traceoff_trigger_ops = {
+static const struct event_trigger_ops traceoff_trigger_ops = {
        .trigger                = traceoff_trigger,
        .print                  = traceoff_trigger_print,
        .init                   = event_trigger_init,
        .free                   = event_trigger_free,
 };
 
-static struct event_trigger_ops traceoff_count_trigger_ops = {
+static const struct event_trigger_ops traceoff_count_trigger_ops = {
        .trigger                = traceoff_count_trigger,
        .print                  = traceoff_trigger_print,
        .init                   = event_trigger_init,
        .free                   = event_trigger_free,
 };
 
-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;
 
        /* we register both traceon and traceoff to this callback */
        if (strcmp(cmd, "traceon") == 0)
@@ -1491,21 +1491,21 @@ snapshot_trigger_print(struct seq_file *m, struct event_trigger_data *data)
                                   data->filter_str);
 }
 
-static struct event_trigger_ops snapshot_trigger_ops = {
+static const struct event_trigger_ops snapshot_trigger_ops = {
        .trigger                = snapshot_trigger,
        .print                  = snapshot_trigger_print,
        .init                   = event_trigger_init,
        .free                   = event_trigger_free,
 };
 
-static struct event_trigger_ops snapshot_count_trigger_ops = {
+static const struct event_trigger_ops snapshot_count_trigger_ops = {
        .trigger                = snapshot_count_trigger,
        .print                  = snapshot_trigger_print,
        .init                   = event_trigger_init,
        .free                   = event_trigger_free,
 };
 
-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);
 }
 
-static struct event_trigger_ops stacktrace_trigger_ops = {
+static const struct event_trigger_ops stacktrace_trigger_ops = {
        .trigger                = stacktrace_trigger,
        .print                  = stacktrace_trigger_print,
        .init                   = event_trigger_init,
        .free                   = event_trigger_free,
 };
 
-static struct event_trigger_ops stacktrace_count_trigger_ops = {
+static const struct event_trigger_ops stacktrace_count_trigger_ops = {
        .trigger                = stacktrace_count_trigger,
        .print                  = stacktrace_trigger_print,
        .init                   = event_trigger_init,
        .free                   = event_trigger_free,
 };
 
-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)
        }
 }
 
-static struct event_trigger_ops event_enable_trigger_ops = {
+static const struct event_trigger_ops event_enable_trigger_ops = {
        .trigger                = event_enable_trigger,
        .print                  = event_enable_trigger_print,
        .init                   = event_trigger_init,
        .free                   = event_enable_trigger_free,
 };
 
-static struct event_trigger_ops event_enable_count_trigger_ops = {
+static const struct event_trigger_ops event_enable_count_trigger_ops = {
        .trigger                = event_enable_count_trigger,
        .print                  = event_enable_trigger_print,
        .init                   = event_trigger_init,
        .free                   = event_enable_trigger_free,
 };
 
-static struct event_trigger_ops event_disable_trigger_ops = {
+static const struct event_trigger_ops event_disable_trigger_ops = {
        .trigger                = event_enable_trigger,
        .print                  = event_enable_trigger_print,
        .init                   = event_trigger_init,
        .free                   = event_enable_trigger_free,
 };
 
-static struct event_trigger_ops event_disable_count_trigger_ops = {
+static const struct event_trigger_ops event_disable_count_trigger_ops = {
        .trigger                = event_enable_count_trigger,
        .print                  = event_enable_trigger_print,
        .init                   = event_trigger_init,
@@ -1916,10 +1916,10 @@ void event_enable_unregister_trigger(char *glob,
                data->ops->free(data);
 }
 
-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;
 
 #ifdef CONFIG_HIST_TRIGGERS