From: mhiramat at kernel.org (Masami Hiramatsu)
Subject: [PATCH v4 01/19] [BUGFIX] tracing: probeevent: Fix to support minus offset from symbol
Date: Wed, 28 Feb 2018 12:19:53 +0900 [thread overview]
Message-ID: <151978799370.2577.9456049827647614166.stgit@devbox> (raw)
In-Reply-To: <151978796240.2577.6531711990653677529.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!)
Changes in v4:
- Fix to decode sign. (Thanks Namhyung!)
- Fix to check UINT_MAX for kprobe offset.
---
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..1cd3fb4d70f8 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 || offset > UINT_MAX) {
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..daf54bda4dc8 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, 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 v4 01/19] [BUGFIX] tracing: probeevent: Fix to support minus offset from symbol
Date: Wed, 28 Feb 2018 12:19:53 +0900 [thread overview]
Message-ID: <151978799370.2577.9456049827647614166.stgit@devbox> (raw)
Message-ID: <20180228031953.WokLQ5xKlL3wqti1Vsuz8bO0qkxuiR5R8yA-AiknQkM@z> (raw)
In-Reply-To: <151978796240.2577.6531711990653677529.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!)
Changes in v4:
- Fix to decode sign. (Thanks Namhyung!)
- Fix to check UINT_MAX for kprobe offset.
---
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..1cd3fb4d70f8 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 || offset > UINT_MAX) {
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..daf54bda4dc8 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, 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 v4 01/19] [BUGFIX] tracing: probeevent: Fix to support minus offset from symbol
Date: Wed, 28 Feb 2018 12:19:53 +0900 [thread overview]
Message-ID: <151978799370.2577.9456049827647614166.stgit@devbox> (raw)
In-Reply-To: <151978796240.2577.6531711990653677529.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!)
Changes in v4:
- Fix to decode sign. (Thanks Namhyung!)
- Fix to check UINT_MAX for kprobe offset.
---
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..1cd3fb4d70f8 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 || offset > UINT_MAX) {
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..daf54bda4dc8 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, 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-28 3:19 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-28 3:19 [PATCH v4 00/19] tracing: probeevent: Improve fetcharg features mhiramat
2018-02-28 3:19 ` Masami Hiramatsu
2018-02-28 3:19 ` Masami Hiramatsu
2018-02-28 3:19 ` mhiramat [this message]
2018-02-28 3:19 ` [PATCH v4 01/19] [BUGFIX] tracing: probeevent: Fix to support minus offset from symbol Masami Hiramatsu
2018-02-28 3:19 ` Masami Hiramatsu
2018-03-02 4:49 ` namhyung
2018-03-02 4:49 ` Namhyung Kim
2018-03-02 4:49 ` Namhyung Kim
2018-03-02 6:32 ` mhiramat
2018-03-02 6:32 ` Masami Hiramatsu
2018-03-02 6:32 ` Masami Hiramatsu
2018-03-05 2:28 ` namhyung
2018-03-05 2:28 ` Namhyung Kim
2018-03-05 2:28 ` Namhyung Kim
2018-03-05 10:05 ` mhiramat
2018-03-05 10:05 ` Masami Hiramatsu
2018-03-05 10:05 ` Masami Hiramatsu
2018-02-28 3:20 ` [PATCH v4 02/19] selftests: ftrace: Add probe event argument syntax testcase mhiramat
2018-02-28 3:20 ` Masami Hiramatsu
2018-02-28 3:20 ` Masami Hiramatsu
2018-02-28 3:20 ` [PATCH v4 03/19] selftests: ftrace: Add a testcase for string type with kprobe_event mhiramat
2018-02-28 3:20 ` Masami Hiramatsu
2018-02-28 3:20 ` Masami Hiramatsu
2018-02-28 3:21 ` [PATCH v4 04/19] selftests: ftrace: Add a testcase for probepoint mhiramat
2018-02-28 3:21 ` Masami Hiramatsu
2018-02-28 3:21 ` Masami Hiramatsu
2018-02-28 3:21 ` [PATCH v4 05/19] tracing: probeevent: Cleanup print argument functions mhiramat
2018-02-28 3:21 ` Masami Hiramatsu
2018-02-28 3:21 ` Masami Hiramatsu
2018-02-28 3:22 ` [PATCH v4 06/19] tracing: probeevent: Cleanup argument field definition mhiramat
2018-02-28 3:22 ` Masami Hiramatsu
2018-02-28 3:22 ` Masami Hiramatsu
2018-02-28 3:22 ` [PATCH v4 07/19] tracing: probeevent: Remove NOKPROBE_SYMBOL from print functions mhiramat
2018-02-28 3:22 ` Masami Hiramatsu
2018-02-28 3:22 ` Masami Hiramatsu
2018-02-28 3:23 ` [PATCH v4 08/19] tracing: probeevent: Introduce new argument fetching code mhiramat
2018-02-28 3:23 ` Masami Hiramatsu
2018-02-28 3:23 ` Masami Hiramatsu
2018-02-28 3:23 ` [PATCH v4 09/19] tracing: probeevent: Unify fetch type tables mhiramat
2018-02-28 3:23 ` Masami Hiramatsu
2018-02-28 3:23 ` Masami Hiramatsu
2018-02-28 3:24 ` [PATCH v4 10/19] tracing: probeevent: Return consumed bytes of dynamic area mhiramat
2018-02-28 3:24 ` Masami Hiramatsu
2018-02-28 3:24 ` Masami Hiramatsu
2018-02-28 3:24 ` [PATCH v4 11/19] tracing: probeevent: Append traceprobe_ for exported function mhiramat
2018-02-28 3:24 ` Masami Hiramatsu
2018-02-28 3:24 ` Masami Hiramatsu
2018-02-28 3:25 ` [PATCH v4 12/19] tracing: probeevent: Unify fetch_insn processing common part mhiramat
2018-02-28 3:25 ` Masami Hiramatsu
2018-02-28 3:25 ` Masami Hiramatsu
2018-02-28 3:25 ` [PATCH v4 13/19] tracing: probeevent: Add symbol type mhiramat
2018-02-28 3:25 ` Masami Hiramatsu
2018-02-28 3:25 ` Masami Hiramatsu
2018-02-28 3:26 ` [PATCH v4 14/19] x86: ptrace: Add function argument access API mhiramat
2018-02-28 3:26 ` Masami Hiramatsu
2018-02-28 3:26 ` Masami Hiramatsu
2018-02-28 3:26 ` [PATCH v4 15/19] tracing: probeevent: Add $argN for accessing function args mhiramat
2018-02-28 3:26 ` Masami Hiramatsu
2018-02-28 3:26 ` Masami Hiramatsu
2018-02-28 3:27 ` [PATCH v4 16/19] tracing: probeevent: Add array type support mhiramat
2018-02-28 3:27 ` Masami Hiramatsu
2018-02-28 3:27 ` Masami Hiramatsu
2018-02-28 3:27 ` [PATCH v4 17/19] selftests: ftrace: Add a testcase for symbol type mhiramat
2018-02-28 3:27 ` Masami Hiramatsu
2018-02-28 3:27 ` Masami Hiramatsu
2018-02-28 3:28 ` [PATCH v4 18/19] selftests: ftrace: Add a testcase for $argN with kprobe_event mhiramat
2018-02-28 3:28 ` Masami Hiramatsu
2018-02-28 3:28 ` Masami Hiramatsu
2018-03-02 5:31 ` namhyung
2018-03-02 5:31 ` Namhyung Kim
2018-03-02 5:31 ` Namhyung Kim
2018-03-02 6:20 ` mhiramat
2018-03-02 6:20 ` Masami Hiramatsu
2018-03-02 6:20 ` Masami Hiramatsu
2018-02-28 3:28 ` [PATCH v4 19/19] selftests: ftrace: Add a testcase for array type " mhiramat
2018-02-28 3:28 ` Masami Hiramatsu
2018-02-28 3:28 ` 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=151978799370.2577.9456049827647614166.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.