hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/kernel/trace/trace_events_trigger.c
....@@ -5,6 +5,7 @@
55 * Copyright (C) 2013 Tom Zanussi <tom.zanussi@linux.intel.com>
66 */
77
8
+#include <linux/security.h>
89 #include <linux/module.h>
910 #include <linux/ctype.h>
1011 #include <linux/mutex.h>
....@@ -174,7 +175,11 @@
174175
175176 static int event_trigger_regex_open(struct inode *inode, struct file *file)
176177 {
177
- int ret = 0;
178
+ int ret;
179
+
180
+ ret = security_locked_down(LOCKDOWN_TRACEFS);
181
+ if (ret)
182
+ return ret;
178183
179184 mutex_lock(&event_mutex);
180185
....@@ -209,7 +214,7 @@
209214 return ret;
210215 }
211216
212
-static int trigger_process_regex(struct trace_event_file *file, char *buff)
217
+int trigger_process_regex(struct trace_event_file *file, char *buff)
213218 {
214219 char *command, *next;
215220 struct event_command *p;
....@@ -299,6 +304,7 @@
299304 static int
300305 event_trigger_open(struct inode *inode, struct file *filp)
301306 {
307
+ /* Checks for tracefs lockdown */
302308 return event_trigger_regex_open(inode, filp);
303309 }
304310
....@@ -750,7 +756,8 @@
750756 goto out;
751757
752758 /* The filter is for the 'trigger' event, not the triggered event */
753
- ret = create_event_filter(file->event_call, filter_str, false, &filter);
759
+ ret = create_event_filter(file->tr, file->event_call,
760
+ filter_str, false, &filter);
754761 /*
755762 * If create_event_filter() fails, filter still needs to be freed.
756763 * Which the calling code will do with data->filter.
....@@ -1212,7 +1219,14 @@
12121219 stacktrace_trigger(struct event_trigger_data *data, void *rec,
12131220 struct ring_buffer_event *event)
12141221 {
1215
- trace_dump_stack(STACK_SKIP);
1222
+ struct trace_event_file *file = data->private_data;
1223
+ unsigned long flags;
1224
+
1225
+ if (file) {
1226
+ local_save_flags(flags);
1227
+ __trace_stack(file->tr, flags, STACK_SKIP, preempt_count());
1228
+ } else
1229
+ trace_dump_stack(STACK_SKIP);
12161230 }
12171231
12181232 static void