diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2025-01-01 11:22:07 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2025-01-01 11:22:07 -0800 |
commit | 56e6a3499e14716b9a28a307bb6d18c10e95301e (patch) | |
tree | efc20c0ec4f68807736e8a049f1d6b2aea5de560 | |
parent | ccb98ccef0e543c2bd4ef1a72270461957f3d8d0 (diff) | |
parent | afc6717628f959941d7b33728570568b4af1c4b8 (diff) |
Merge tag 'trace-v6.13-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace
Pull tracing fix from Steven Rostedt:
"Fix trace event string check when dealing with array of strings
The xe_bo_move event has a field that indexes into an array of
strings. The TP_fast_assign() added the index into the ring buffer and
the TP_printk() had a "%s" that referenced the array using the index
in the ring buffer. This is a legitimate use of "%s" in trace events.
But this triggered a false positive in the test_event_printk() at boot
saying that the string was dangerous.
Change the check to allow arrays using fields in the ring buffer as an
index to be considered a safe string"
* tag 'trace-v6.13-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace:
tracing: Have process_string() also allow arrays
-rw-r--r-- | kernel/trace/trace_events.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index 1545cc8b49d0..770e7ed91716 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c @@ -365,6 +365,18 @@ static bool process_string(const char *fmt, int len, struct trace_event_call *ca } while (s < e); /* + * Check for arrays. If the argument has: foo[REC->val] + * then it is very likely that foo is an array of strings + * that are safe to use. + */ + r = strstr(s, "["); + if (r && r < e) { + r = strstr(r, "REC->"); + if (r && r < e) + return true; + } + + /* * If there's any strings in the argument consider this arg OK as it * could be: REC->field ? "foo" : "bar" and we don't want to get into * verifying that logic here. |