From: Masami Hiramatsu (Google) <[email protected]> Report wrong dynamic event command via error_log. --- # echo "z hoge" > /sys/kernel/tracing/dynamic_events sh: write error: Invalid argument # cat /sys/kernel/tracing/error_log [ 73.371714] dynevent: error: Invalid dynamic event command Command: z hoge ^ ---
Signed-off-by: Masami Hiramatsu (Google) <[email protected]> --- kernel/trace/trace_dynevent.c | 11 +++++++++-- kernel/trace/trace_probe.h | 3 ++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/kernel/trace/trace_dynevent.c b/kernel/trace/trace_dynevent.c index d06854bd32b3..536a7704abfd 100644 --- a/kernel/trace/trace_dynevent.c +++ b/kernel/trace/trace_dynevent.c @@ -14,6 +14,7 @@ #include "trace.h" #include "trace_output.h" /* for trace_event_sem */ +#include "trace_probe.h" #include "trace_dynevent.h" DEFINE_MUTEX(dyn_event_ops_mutex); @@ -144,9 +145,15 @@ static int create_dyn_event(const char *raw_command) if (!ret || ret != -ECANCELED) break; } - mutex_unlock(&dyn_event_ops_mutex); - if (ret == -ECANCELED) + if (ret == -ECANCELED) { + /* Wrong dynamic event. Leave an error message. */ + trace_probe_log_init("dynevent", 1, &raw_command); + trace_probe_log_err(0, BAD_DYN_EVENT); + trace_probe_log_clear(); ret = -EINVAL; + } + + mutex_unlock(&dyn_event_ops_mutex); return ret; } diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h index 591adc9bb1e9..e6e5c884e60a 100644 --- a/kernel/trace/trace_probe.h +++ b/kernel/trace/trace_probe.h @@ -567,7 +567,8 @@ extern int traceprobe_define_arg_fields(struct trace_event_call *event_call, C(BAD_ACCESS_FMT, "Access memory address requires @"), \ C(BAD_ACCESS_TYPE, "Bad memory access type"), \ C(BAD_ACCESS_LEN, "This memory access length is not supported"), \ - C(BAD_ACCESS_ADDR, "Invalid access memory address"), + C(BAD_ACCESS_ADDR, "Invalid access memory address"), \ + C(BAD_DYN_EVENT, "Invalid dynamic event command"), #undef C #define C(a, b) TP_ERR_##a
