mirror of
https://github.com/torvalds/linux.git
synced 2026-03-14 02:06:15 +01:00
tracing: Add a helper function to handle the dereference arg in verifier
Add a helper function called handle_dereference_arg() to replace the logic that is identical in two locations of test_event_printk(). Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Link: https://lore.kernel.org/20250507191703.5dd8a61d@gandalf.local.home Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
This commit is contained in:
parent
f75340d73c
commit
6956ea9fdc
1 changed files with 20 additions and 10 deletions
|
|
@ -400,6 +400,20 @@ static bool process_string(const char *fmt, int len, struct trace_event_call *ca
|
|||
return true;
|
||||
}
|
||||
|
||||
static void handle_dereference_arg(const char *arg_str, u64 string_flags, int len,
|
||||
u64 *dereference_flags, int arg,
|
||||
struct trace_event_call *call)
|
||||
{
|
||||
if (string_flags & (1ULL << arg)) {
|
||||
if (process_string(arg_str, len, call))
|
||||
*dereference_flags &= ~(1ULL << arg);
|
||||
} else if (process_pointer(arg_str, len, call))
|
||||
*dereference_flags &= ~(1ULL << arg);
|
||||
else
|
||||
pr_warn("TRACE EVENT ERROR: Bad dereference argument: '%.*s'\n",
|
||||
len, arg_str);
|
||||
}
|
||||
|
||||
/*
|
||||
* Examine the print fmt of the event looking for unsafe dereference
|
||||
* pointers using %p* that could be recorded in the trace event and
|
||||
|
|
@ -563,11 +577,9 @@ static void test_event_printk(struct trace_event_call *call)
|
|||
}
|
||||
|
||||
if (dereference_flags & (1ULL << arg)) {
|
||||
if (string_flags & (1ULL << arg)) {
|
||||
if (process_string(fmt + start_arg, e - start_arg, call))
|
||||
dereference_flags &= ~(1ULL << arg);
|
||||
} else if (process_pointer(fmt + start_arg, e - start_arg, call))
|
||||
dereference_flags &= ~(1ULL << arg);
|
||||
handle_dereference_arg(fmt + start_arg, string_flags,
|
||||
e - start_arg,
|
||||
&dereference_flags, arg, call);
|
||||
}
|
||||
|
||||
start_arg = i;
|
||||
|
|
@ -578,11 +590,9 @@ static void test_event_printk(struct trace_event_call *call)
|
|||
}
|
||||
|
||||
if (dereference_flags & (1ULL << arg)) {
|
||||
if (string_flags & (1ULL << arg)) {
|
||||
if (process_string(fmt + start_arg, i - start_arg, call))
|
||||
dereference_flags &= ~(1ULL << arg);
|
||||
} else if (process_pointer(fmt + start_arg, i - start_arg, call))
|
||||
dereference_flags &= ~(1ULL << arg);
|
||||
handle_dereference_arg(fmt + start_arg, string_flags,
|
||||
i - start_arg,
|
||||
&dereference_flags, arg, call);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue