From: Masami Hiramatsu <mhiramat@redhat.com>
To: Frederic Weisbecker <fweisbec@gmail.com>,
Steven Rostedt <rostedt@goodmis.org>, Ingo Molnar <mingo@elte.hu>,
lkml <linux-kernel@vger.kernel.org>
Cc: systemtap <systemtap@sources.redhat.com>,
DLE <dle-develop@lists.sourceforge.net>,
Masami Hiramatsu <mhiramat@redhat.com>,
Frederic Weisbecker <fweisbec@gmail.com>,
Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>,
Arnaldo Carvalho de Melo <acme@redhat.com>,
Steven Rostedt <rostedt@goodmis.org>,
Mike Galbraith <efault@gmx.de>, Paul Mackerras <paulus@samba.org>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Christoph Hellwig <hch@infradead.org>,
Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
Jim Keniston <jkenisto@us.ibm.com>,
"Frank Ch. Eigler" <fche@redhat.com>
Subject: [RFC PATCH tracing/kprobes 2/5] tracing/kprobes: Avoid field name confliction
Date: Fri, 25 Sep 2009 12:15:05 -0700 [thread overview]
Message-ID: <20090925191505.12939.69682.stgit@omoto> (raw)
In-Reply-To: <20090925191424.12939.91503.stgit@omoto>
Check whether the argument name is conflict with other field names.
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Cc: Jim Keniston <jkenisto@us.ibm.com>
Cc: Frank Ch. Eigler <fche@redhat.com>
---
kernel/trace/trace_kprobe.c | 64 +++++++++++++++++++++++++++++++++++--------
1 files changed, 52 insertions(+), 12 deletions(-)
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index f63ead0..c09411f 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -38,6 +38,24 @@
#define MAX_EVENT_NAME_LEN 64
#define KPROBE_EVENT_SYSTEM "kprobes"
+/* Reserved field names */
+#define FIELD_STRING_IP "ip"
+#define FIELD_STRING_NARGS "nargs"
+#define FIELD_STRING_RETIP "ret_ip"
+#define FIELD_STRING_FUNC "func"
+
+const char *reserved_field_names[] = {
+ "common_type",
+ "common_flags",
+ "common_preempt_count",
+ "common_pid",
+ "common_tgid",
+ FIELD_STRING_IP,
+ FIELD_STRING_NARGS,
+ FIELD_STRING_RETIP,
+ FIELD_STRING_FUNC,
+};
+
/* currently, trace_kprobe only supports X86. */
struct fetch_func {
@@ -551,6 +569,20 @@ static int parse_probe_arg(char *arg, struct fetch_func *ff, int is_return)
return ret;
}
+/* Return 1 if name is reserved or already used by another argument */
+static int conflict_field_name(const char *name,
+ struct probe_arg *args, int narg)
+{
+ int i;
+ for (i = 0; i < ARRAY_SIZE(reserved_field_names); i++)
+ if (!strcmp(reserved_field_names[i], name))
+ return 1;
+ for (i = 0; i < narg; i++)
+ if (!strcmp(args[i].name, name))
+ return 1;
+ return 0;
+}
+
static int create_trace_probe(int argc, char **argv)
{
/*
@@ -652,6 +684,12 @@ static int create_trace_probe(int argc, char **argv)
*arg++ = '\0';
else
arg = argv[i];
+
+ if (conflict_field_name(argv[i], tp->args, i)) {
+ ret = -EINVAL;
+ goto error;
+ }
+
tp->args[i].name = kstrdup(argv[i], GFP_KERNEL);
/* Parse fetch argument */
@@ -1054,8 +1092,8 @@ static int kprobe_event_define_fields(struct ftrace_event_call *event_call)
if (!ret)
return ret;
- DEFINE_FIELD(unsigned long, ip, "ip", 0);
- DEFINE_FIELD(int, nargs, "nargs", 1);
+ DEFINE_FIELD(unsigned long, ip, FIELD_STRING_IP, 0);
+ DEFINE_FIELD(int, nargs, FIELD_STRING_NARGS, 1);
/* Set argument names as fields */
for (i = 0; i < tp->nr_args; i++)
DEFINE_FIELD(unsigned long, args[i], tp->args[i].name, 0);
@@ -1072,9 +1110,9 @@ static int kretprobe_event_define_fields(struct ftrace_event_call *event_call)
if (!ret)
return ret;
- DEFINE_FIELD(unsigned long, func, "func", 0);
- DEFINE_FIELD(unsigned long, ret_ip, "ret_ip", 0);
- DEFINE_FIELD(int, nargs, "nargs", 1);
+ DEFINE_FIELD(unsigned long, func, FIELD_STRING_FUNC, 0);
+ DEFINE_FIELD(unsigned long, ret_ip, FIELD_STRING_RETIP, 0);
+ DEFINE_FIELD(int, nargs, FIELD_STRING_NARGS, 1);
/* Set argument names as fields */
for (i = 0; i < tp->nr_args; i++)
DEFINE_FIELD(unsigned long, args[i], tp->args[i].name, 0);
@@ -1123,15 +1161,16 @@ static int kprobe_event_show_format(struct ftrace_event_call *call,
int ret, i;
struct trace_probe *tp = (struct trace_probe *)call->data;
- SHOW_FIELD(unsigned long, ip, "ip");
- SHOW_FIELD(int, nargs, "nargs");
+ SHOW_FIELD(unsigned long, ip, FIELD_STRING_IP);
+ SHOW_FIELD(int, nargs, FIELD_STRING_NARGS);
/* Show fields */
for (i = 0; i < tp->nr_args; i++)
SHOW_FIELD(unsigned long, args[i], tp->args[i].name);
trace_seq_puts(s, "\n");
- return __probe_event_show_format(s, tp, "(%lx)", "REC->ip");
+ return __probe_event_show_format(s, tp, "(%lx)",
+ "REC->" FIELD_STRING_IP);
}
static int kretprobe_event_show_format(struct ftrace_event_call *call,
@@ -1141,9 +1180,9 @@ static int kretprobe_event_show_format(struct ftrace_event_call *call,
int ret, i;
struct trace_probe *tp = (struct trace_probe *)call->data;
- SHOW_FIELD(unsigned long, func, "func");
- SHOW_FIELD(unsigned long, ret_ip, "ret_ip");
- SHOW_FIELD(int, nargs, "nargs");
+ SHOW_FIELD(unsigned long, func, FIELD_STRING_FUNC);
+ SHOW_FIELD(unsigned long, ret_ip, FIELD_STRING_RETIP);
+ SHOW_FIELD(int, nargs, FIELD_STRING_NARGS);
/* Show fields */
for (i = 0; i < tp->nr_args; i++)
@@ -1151,7 +1190,8 @@ static int kretprobe_event_show_format(struct ftrace_event_call *call,
trace_seq_puts(s, "\n");
return __probe_event_show_format(s, tp, "(%lx <- %lx)",
- "REC->func, REC->ret_ip");
+ "REC->" FIELD_STRING_FUNC
+ ", REC->" FIELD_STRING_RETIP);
}
#ifdef CONFIG_EVENT_PROFILE
--
Masami Hiramatsu
Software Engineer
Hitachi Computer Products (America), Inc.
Software Solutions Division
e-mail: mhiramat@redhat.com
next prev parent reply other threads:[~2009-09-25 19:13 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-25 19:14 [RFC PATCH tracing/kprobes 0/5] tracing/kprobes, perf: perf kprobe support Masami Hiramatsu
2009-09-25 19:14 ` [RFC PATCH tracing/kprobes 1/5] tracing/kprobes: Rename special variables syntax Masami Hiramatsu
2009-09-25 19:15 ` Masami Hiramatsu [this message]
2009-09-28 2:20 ` [RFC PATCH tracing/kprobes 2/5] tracing/kprobes: Avoid field name confliction Li Zefan
2009-09-28 16:52 ` Masami Hiramatsu
2009-09-25 19:15 ` [RFC PATCH tracing/kprobes 3/5] tracing/kprobes: Rename fixed field name Masami Hiramatsu
2009-09-25 19:15 ` [RFC PATCH tracing/kprobes 4/5] perf: Support perf kprobe command for kprobe-event setup helper Masami Hiramatsu
2009-09-26 8:52 ` Steven Rostedt
2009-09-28 16:51 ` Masami Hiramatsu
2009-09-25 19:16 ` [RFC PATCH tracing/kprobes 5/5] perf: kprobe command supports without libdwarf Masami Hiramatsu
2009-09-30 1:06 ` [RFC PATCH tracing/kprobes 0/5] tracing/kprobes, perf: perf kprobe support Masami Hiramatsu
2009-09-30 12:04 ` Ingo Molnar
2009-09-30 14:57 ` Arnaldo Carvalho de Melo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090925191505.12939.69682.stgit@omoto \
--to=mhiramat@redhat.com \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@redhat.com \
--cc=ananth@in.ibm.com \
--cc=dle-develop@lists.sourceforge.net \
--cc=efault@gmx.de \
--cc=fche@redhat.com \
--cc=fweisbec@gmail.com \
--cc=hch@infradead.org \
--cc=jkenisto@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=paulus@samba.org \
--cc=rostedt@goodmis.org \
--cc=systemtap@sources.redhat.com \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.