From: mhiramat at kernel.org (Masami Hiramatsu)
Subject: [PATCH v3 01/18] [BUGFIX] tracing: probeevent: Fix to support minus offset from symbol
Date: Sat, 24 Feb 2018 14:28:52 +0900 [thread overview]
Message-ID: <151945013281.27508.4068021929757474274.stgit@devbox> (raw)
In-Reply-To: <151945010287.27508.6226184958678620828.stgit@devbox>
In Documentation/trace/kprobetrace.txt, it says
@SYM[+|-offs] : Fetch memory at SYM +|- offs (SYM should be a data symbol)
However, the parser doesn't parse minus offset correctly, since
commit 2fba0c8867af ("tracing/kprobes: Fix probe offset to be
unsigned") drops minus ("-") offset support for kprobe probe
address usage.
This fixes the traceprobe_split_symbol_offset() to parse minus
offset again with checking the offset range, and add a minus
offset check in kprobe probe address usage.
Fixes: 2fba0c8867af ("tracing/kprobes: Fix probe offset to be unsigned")
Signed-off-by: Masami Hiramatsu <mhiramat at kernel.org>
---
Changes in v3:
- Use kstrtol instead of kstrtoul. (Thanks Namhyung!)
---
kernel/trace/trace_kprobe.c | 4 ++--
kernel/trace/trace_probe.c | 8 +++-----
kernel/trace/trace_probe.h | 2 +-
3 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index 5ce9b8cf7be3..b5b1d8aa47d6 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -667,7 +667,7 @@ static int create_trace_kprobe(int argc, char **argv)
char *symbol = NULL, *event = NULL, *group = NULL;
int maxactive = 0;
char *arg;
- unsigned long offset = 0;
+ long offset = 0;
void *addr = NULL;
char buf[MAX_EVENT_NAME_LEN];
@@ -755,7 +755,7 @@ static int create_trace_kprobe(int argc, char **argv)
symbol = argv[1];
/* TODO: support .init module functions */
ret = traceprobe_split_symbol_offset(symbol, &offset);
- if (ret) {
+ if (ret || offset < 0) {
pr_info("Failed to parse either an address or a symbol.\n");
return ret;
}
diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c
index d59357308677..d3d1ee820336 100644
--- a/kernel/trace/trace_probe.c
+++ b/kernel/trace/trace_probe.c
@@ -320,7 +320,7 @@ static fetch_func_t get_fetch_size_function(const struct fetch_type *type,
}
/* Split symbol and offset. */
-int traceprobe_split_symbol_offset(char *symbol, unsigned long *offset)
+int traceprobe_split_symbol_offset(char *symbol, long *offset)
{
char *tmp;
int ret;
@@ -328,13 +328,11 @@ int traceprobe_split_symbol_offset(char *symbol, unsigned long *offset)
if (!offset)
return -EINVAL;
- tmp = strchr(symbol, '+');
+ tmp = strpbrk(symbol, "+-");
if (tmp) {
- /* skip sign because kstrtoul doesn't accept '+' */
- ret = kstrtoul(tmp + 1, 0, offset);
+ ret = kstrtol(tmp + 1, 0, offset);
if (ret)
return ret;
-
*tmp = '\0';
} else
*offset = 0;
diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h
index 0745f895f780..75daff22ccea 100644
--- a/kernel/trace/trace_probe.h
+++ b/kernel/trace/trace_probe.h
@@ -365,7 +365,7 @@ extern int traceprobe_conflict_field_name(const char *name,
extern void traceprobe_update_arg(struct probe_arg *arg);
extern void traceprobe_free_probe_arg(struct probe_arg *arg);
-extern int traceprobe_split_symbol_offset(char *symbol, unsigned long *offset);
+extern int traceprobe_split_symbol_offset(char *symbol, long *offset);
/* Sum up total data length for dynamic arraies (strings) */
static nokprobe_inline int
--
To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: mhiramat@kernel.org (Masami Hiramatsu)
Subject: [PATCH v3 01/18] [BUGFIX] tracing: probeevent: Fix to support minus offset from symbol
Date: Sat, 24 Feb 2018 14:28:52 +0900 [thread overview]
Message-ID: <151945013281.27508.4068021929757474274.stgit@devbox> (raw)
Message-ID: <20180224052852.D7HsFkcQkixyKslipq470HwhZSWKkbbxdmJjw81l2EA@z> (raw)
In-Reply-To: <151945010287.27508.6226184958678620828.stgit@devbox>
In Documentation/trace/kprobetrace.txt, it says
@SYM[+|-offs] : Fetch memory at SYM +|- offs (SYM should be a data symbol)
However, the parser doesn't parse minus offset correctly, since
commit 2fba0c8867af ("tracing/kprobes: Fix probe offset to be
unsigned") drops minus ("-") offset support for kprobe probe
address usage.
This fixes the traceprobe_split_symbol_offset() to parse minus
offset again with checking the offset range, and add a minus
offset check in kprobe probe address usage.
Fixes: 2fba0c8867af ("tracing/kprobes: Fix probe offset to be unsigned")
Signed-off-by: Masami Hiramatsu <mhiramat at kernel.org>
---
Changes in v3:
- Use kstrtol instead of kstrtoul. (Thanks Namhyung!)
---
kernel/trace/trace_kprobe.c | 4 ++--
kernel/trace/trace_probe.c | 8 +++-----
kernel/trace/trace_probe.h | 2 +-
3 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index 5ce9b8cf7be3..b5b1d8aa47d6 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -667,7 +667,7 @@ static int create_trace_kprobe(int argc, char **argv)
char *symbol = NULL, *event = NULL, *group = NULL;
int maxactive = 0;
char *arg;
- unsigned long offset = 0;
+ long offset = 0;
void *addr = NULL;
char buf[MAX_EVENT_NAME_LEN];
@@ -755,7 +755,7 @@ static int create_trace_kprobe(int argc, char **argv)
symbol = argv[1];
/* TODO: support .init module functions */
ret = traceprobe_split_symbol_offset(symbol, &offset);
- if (ret) {
+ if (ret || offset < 0) {
pr_info("Failed to parse either an address or a symbol.\n");
return ret;
}
diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c
index d59357308677..d3d1ee820336 100644
--- a/kernel/trace/trace_probe.c
+++ b/kernel/trace/trace_probe.c
@@ -320,7 +320,7 @@ static fetch_func_t get_fetch_size_function(const struct fetch_type *type,
}
/* Split symbol and offset. */
-int traceprobe_split_symbol_offset(char *symbol, unsigned long *offset)
+int traceprobe_split_symbol_offset(char *symbol, long *offset)
{
char *tmp;
int ret;
@@ -328,13 +328,11 @@ int traceprobe_split_symbol_offset(char *symbol, unsigned long *offset)
if (!offset)
return -EINVAL;
- tmp = strchr(symbol, '+');
+ tmp = strpbrk(symbol, "+-");
if (tmp) {
- /* skip sign because kstrtoul doesn't accept '+' */
- ret = kstrtoul(tmp + 1, 0, offset);
+ ret = kstrtol(tmp + 1, 0, offset);
if (ret)
return ret;
-
*tmp = '\0';
} else
*offset = 0;
diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h
index 0745f895f780..75daff22ccea 100644
--- a/kernel/trace/trace_probe.h
+++ b/kernel/trace/trace_probe.h
@@ -365,7 +365,7 @@ extern int traceprobe_conflict_field_name(const char *name,
extern void traceprobe_update_arg(struct probe_arg *arg);
extern void traceprobe_free_probe_arg(struct probe_arg *arg);
-extern int traceprobe_split_symbol_offset(char *symbol, unsigned long *offset);
+extern int traceprobe_split_symbol_offset(char *symbol, long *offset);
/* Sum up total data length for dynamic arraies (strings) */
static nokprobe_inline int
--
To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: Masami Hiramatsu <mhiramat@kernel.org>
To: Steven Rostedt <rostedt@goodmis.org>, linux-kernel@vger.kernel.org
Cc: mhiramat@kernel.org, Ingo Molnar <mingo@redhat.com>,
Namhyung Kim <namhyung@kernel.org>,
Tom Zanussi <tom.zanussi@linux.intel.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
linux-trace-users@vger.kernel.org,
linux-kselftest@vger.kernel.org, shuah@kernel.org
Subject: [PATCH v3 01/18] [BUGFIX] tracing: probeevent: Fix to support minus offset from symbol
Date: Sat, 24 Feb 2018 14:28:52 +0900 [thread overview]
Message-ID: <151945013281.27508.4068021929757474274.stgit@devbox> (raw)
In-Reply-To: <151945010287.27508.6226184958678620828.stgit@devbox>
In Documentation/trace/kprobetrace.txt, it says
@SYM[+|-offs] : Fetch memory at SYM +|- offs (SYM should be a data symbol)
However, the parser doesn't parse minus offset correctly, since
commit 2fba0c8867af ("tracing/kprobes: Fix probe offset to be
unsigned") drops minus ("-") offset support for kprobe probe
address usage.
This fixes the traceprobe_split_symbol_offset() to parse minus
offset again with checking the offset range, and add a minus
offset check in kprobe probe address usage.
Fixes: 2fba0c8867af ("tracing/kprobes: Fix probe offset to be unsigned")
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
---
Changes in v3:
- Use kstrtol instead of kstrtoul. (Thanks Namhyung!)
---
kernel/trace/trace_kprobe.c | 4 ++--
kernel/trace/trace_probe.c | 8 +++-----
kernel/trace/trace_probe.h | 2 +-
3 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index 5ce9b8cf7be3..b5b1d8aa47d6 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -667,7 +667,7 @@ static int create_trace_kprobe(int argc, char **argv)
char *symbol = NULL, *event = NULL, *group = NULL;
int maxactive = 0;
char *arg;
- unsigned long offset = 0;
+ long offset = 0;
void *addr = NULL;
char buf[MAX_EVENT_NAME_LEN];
@@ -755,7 +755,7 @@ static int create_trace_kprobe(int argc, char **argv)
symbol = argv[1];
/* TODO: support .init module functions */
ret = traceprobe_split_symbol_offset(symbol, &offset);
- if (ret) {
+ if (ret || offset < 0) {
pr_info("Failed to parse either an address or a symbol.\n");
return ret;
}
diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c
index d59357308677..d3d1ee820336 100644
--- a/kernel/trace/trace_probe.c
+++ b/kernel/trace/trace_probe.c
@@ -320,7 +320,7 @@ static fetch_func_t get_fetch_size_function(const struct fetch_type *type,
}
/* Split symbol and offset. */
-int traceprobe_split_symbol_offset(char *symbol, unsigned long *offset)
+int traceprobe_split_symbol_offset(char *symbol, long *offset)
{
char *tmp;
int ret;
@@ -328,13 +328,11 @@ int traceprobe_split_symbol_offset(char *symbol, unsigned long *offset)
if (!offset)
return -EINVAL;
- tmp = strchr(symbol, '+');
+ tmp = strpbrk(symbol, "+-");
if (tmp) {
- /* skip sign because kstrtoul doesn't accept '+' */
- ret = kstrtoul(tmp + 1, 0, offset);
+ ret = kstrtol(tmp + 1, 0, offset);
if (ret)
return ret;
-
*tmp = '\0';
} else
*offset = 0;
diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h
index 0745f895f780..75daff22ccea 100644
--- a/kernel/trace/trace_probe.h
+++ b/kernel/trace/trace_probe.h
@@ -365,7 +365,7 @@ extern int traceprobe_conflict_field_name(const char *name,
extern void traceprobe_update_arg(struct probe_arg *arg);
extern void traceprobe_free_probe_arg(struct probe_arg *arg);
-extern int traceprobe_split_symbol_offset(char *symbol, unsigned long *offset);
+extern int traceprobe_split_symbol_offset(char *symbol, long *offset);
/* Sum up total data length for dynamic arraies (strings) */
static nokprobe_inline int
next prev parent reply other threads:[~2018-02-24 5:28 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-24 5:28 [PATCH v3 00/18] tracing: probeevent: Improve fetcharg features mhiramat
2018-02-24 5:28 ` Masami Hiramatsu
2018-02-24 5:28 ` Masami Hiramatsu
2018-02-24 5:28 ` mhiramat [this message]
2018-02-24 5:28 ` [PATCH v3 01/18] [BUGFIX] tracing: probeevent: Fix to support minus offset from symbol Masami Hiramatsu
2018-02-24 5:28 ` Masami Hiramatsu
2018-02-26 0:38 ` namhyung
2018-02-26 0:38 ` Namhyung Kim
2018-02-26 0:38 ` Namhyung Kim
2018-02-27 5:23 ` mhiramat
2018-02-27 5:23 ` Masami Hiramatsu
2018-02-27 5:23 ` Masami Hiramatsu
2018-02-24 5:29 ` [PATCH v3 02/18] selftests: ftrace: Add probe event argument syntax testcase mhiramat
2018-02-24 5:29 ` Masami Hiramatsu
2018-02-24 5:29 ` Masami Hiramatsu
2018-02-24 5:29 ` [PATCH v3 03/18] selftests: ftrace: Add a testcase for string type with kprobe_event mhiramat
2018-02-24 5:29 ` Masami Hiramatsu
2018-02-24 5:29 ` Masami Hiramatsu
2018-02-24 5:30 ` [PATCH v3 04/18] tracing: probeevent: Cleanup print argument functions mhiramat
2018-02-24 5:30 ` Masami Hiramatsu
2018-02-24 5:30 ` Masami Hiramatsu
2018-02-24 5:30 ` [PATCH v3 05/18] tracing: probeevent: Cleanup argument field definition mhiramat
2018-02-24 5:30 ` Masami Hiramatsu
2018-02-24 5:30 ` Masami Hiramatsu
2018-02-24 5:31 ` [PATCH v3 06/18] tracing: probeevent: Remove NOKPROBE_SYMBOL from print functions mhiramat
2018-02-24 5:31 ` Masami Hiramatsu
2018-02-24 5:31 ` Masami Hiramatsu
2018-02-24 5:31 ` [PATCH v3 07/18] tracing: probeevent: Introduce new argument fetching code mhiramat
2018-02-24 5:31 ` Masami Hiramatsu
2018-02-24 5:31 ` Masami Hiramatsu
2018-02-24 5:32 ` [PATCH v3 08/18] tracing: probeevent: Unify fetch type tables mhiramat
2018-02-24 5:32 ` Masami Hiramatsu
2018-02-24 5:32 ` Masami Hiramatsu
2018-02-24 5:32 ` [PATCH v3 09/18] tracing: probeevent: Return consumed bytes of dynamic area mhiramat
2018-02-24 5:32 ` Masami Hiramatsu
2018-02-24 5:32 ` Masami Hiramatsu
2018-02-24 5:33 ` [PATCH v3 10/18] tracing: probeevent: Append traceprobe_ for exported function mhiramat
2018-02-24 5:33 ` Masami Hiramatsu
2018-02-24 5:33 ` Masami Hiramatsu
2018-02-24 5:33 ` [PATCH v3 11/18] tracing: probeevent: Unify fetch_insn processing common part mhiramat
2018-02-24 5:33 ` Masami Hiramatsu
2018-02-24 5:33 ` Masami Hiramatsu
2018-02-24 5:34 ` [PATCH v3 12/18] tracing: probeevent: Add symbol type mhiramat
2018-02-24 5:34 ` Masami Hiramatsu
2018-02-24 5:34 ` Masami Hiramatsu
2018-02-24 5:34 ` [PATCH v3 13/18] x86: ptrace: Add function argument access API mhiramat
2018-02-24 5:34 ` Masami Hiramatsu
2018-02-24 5:34 ` Masami Hiramatsu
2018-02-24 5:35 ` [PATCH v3 14/18] tracing: probeevent: Add $argN for accessing function args mhiramat
2018-02-24 5:35 ` Masami Hiramatsu
2018-02-24 5:35 ` Masami Hiramatsu
2018-02-24 5:35 ` [PATCH v3 15/18] tracing: probeevent: Add array type support mhiramat
2018-02-24 5:35 ` Masami Hiramatsu
2018-02-24 5:35 ` Masami Hiramatsu
2018-02-26 1:45 ` namhyung
2018-02-26 1:45 ` Namhyung Kim
2018-02-26 1:45 ` Namhyung Kim
2018-02-26 10:16 ` mhiramat
2018-02-26 10:16 ` Masami Hiramatsu
2018-02-26 10:16 ` Masami Hiramatsu
2018-02-24 5:36 ` [PATCH v3 16/18] selftests: ftrace: Add a testcase for symbol type mhiramat
2018-02-24 5:36 ` Masami Hiramatsu
2018-02-24 5:36 ` Masami Hiramatsu
2018-02-24 5:36 ` [PATCH v3 17/18] selftests: ftrace: Add a testcase for $argN with kprobe_event mhiramat
2018-02-24 5:36 ` Masami Hiramatsu
2018-02-24 5:36 ` Masami Hiramatsu
2018-02-24 5:37 ` [PATCH v3 18/18] selftests: ftrace: Add a testcase for array type " mhiramat
2018-02-24 5:37 ` Masami Hiramatsu
2018-02-24 5:37 ` Masami Hiramatsu
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=151945013281.27508.4068021929757474274.stgit@devbox \
--to=unknown@example.com \
/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.