From: Masami Hiramatsu (Google) <[email protected]>

The commit 69efd863a785 ("tracing/eprobes: Allow use of BTF names
to dereference pointers") allows eprobe to use event field without
"$" prefix when it is used with typecast, it is natual to allow it
without typecast.

Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
---
 Changes in v8:
  - Newly added.
---
 kernel/trace/trace_probe.c                         |   12 +++++++++++-
 kernel/trace/trace_probe.h                         |    1 +
 .../test.d/dynevent/eprobes_syntax_errors.tc       |    3 +--
 3 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c
index 0da7c0b53ba7..2ce7d62471cb 100644
--- a/kernel/trace/trace_probe.c
+++ b/kernel/trace/trace_probe.c
@@ -1341,7 +1341,17 @@ parse_probe_arg(char *arg, const struct fetch_type *type,
                ret = handle_typecast(arg, pcode, end, ctx);
                break;
        default:
-               if (isalpha(arg[0]) || arg[0] == '_') { /* BTF variable */
+               if (isalpha(arg[0]) || arg[0] == '_') {
+                       /* BTF variable or event field*/
+                       if (ctx->flags & TPARG_FL_TEVENT) {
+                               ret = parse_trace_event(arg, *pcode, ctx);
+                               if (ret < 0) {
+                                       trace_probe_log_err(ctx->offset,
+                                                           NO_EVENT_FIELD);
+                                       return -EINVAL;
+                               }
+                               break;
+                       }
                        if (!tparg_is_function_entry(ctx->flags) &&
                            !tparg_is_function_return(ctx->flags)) {
                                trace_probe_log_err(ctx->offset, NOSUP_BTFARG);
diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h
index 40b53b5b58a9..2e0d8384ee5c 100644
--- a/kernel/trace/trace_probe.h
+++ b/kernel/trace/trace_probe.h
@@ -559,6 +559,7 @@ extern int traceprobe_define_arg_fields(struct 
trace_event_call *event_call,
        C(NO_PTR_STRCT,         "This is not a pointer to union/structure."),   
\
        C(NOSUP_DAT_ARG,        "Non pointer structure/union argument is not 
supported."),\
        C(BAD_HYPHEN,           "Failed to parse single hyphen. Forgot '>'?"),  
\
+       C(NO_EVENT_FIELD,       "This event field is not found."),      \
        C(NO_BTF_FIELD,         "This field is not found."),    \
        C(BAD_BTF_TID,          "Failed to get BTF type info."),\
        C(BAD_TYPE4STR,         "This type does not fit for string."),\
diff --git 
a/tools/testing/selftests/ftrace/test.d/dynevent/eprobes_syntax_errors.tc 
b/tools/testing/selftests/ftrace/test.d/dynevent/eprobes_syntax_errors.tc
index 2a680c086047..0e65e787e426 100644
--- a/tools/testing/selftests/ftrace/test.d/dynevent/eprobes_syntax_errors.tc
+++ b/tools/testing/selftests/ftrace/test.d/dynevent/eprobes_syntax_errors.tc
@@ -10,7 +10,7 @@ check_error() { # command-with-error-pos-by-^
 check_error 'e ^a.'                    # NO_EVENT_INFO
 check_error 'e ^.b'                    # NO_EVENT_INFO
 check_error 'e ^a.b'                   # BAD_ATTACH_EVENT
-check_error 'e syscalls/sys_enter_openat ^foo' # BAD_ATTACH_ARG
+check_error 'e syscalls/sys_enter_openat ^foo' # NO_EVENT_FIELD
 check_error 'e:^/bar syscalls/sys_enter_openat'        # NO_GROUP_NAME
 check_error 
'e:^12345678901234567890123456789012345678901234567890123456789012345/bar 
syscalls/sys_enter_openat'       # GROUP_TOO_LONG
 
@@ -19,7 +19,6 @@ check_error 'e:^ syscalls/sys_enter_openat'           # 
NO_EVENT_NAME
 check_error 
'e:foo/^12345678901234567890123456789012345678901234567890123456789012345 
syscalls/sys_enter_openat'       # EVENT_TOO_LONG
 check_error 'e:foo/^bar.1 syscalls/sys_enter_openat'   # BAD_EVENT_NAME
 
-check_error 'e:foo/bar syscalls/sys_enter_openat arg=^dfd'     # BAD_FETCH_ARG
 check_error 'e:foo/bar syscalls/sys_enter_openat arg=^$foo'    # BAD_ATTACH_ARG
 
 if grep -q '<attached-group>\.<attached-event>.*\[if <filter>\]' README; then


Reply via email to