summaryrefslogtreecommitdiff |
diff options
author | Miroslav Benes <mbenes@suse.cz> | 2018-12-27 15:12:59 +0100 |
---|---|---|
committer | Miroslav Benes <mbenes@suse.cz> | 2018-12-27 15:12:59 +0100 |
commit | 060dfa18414a5bece431e94e900cb23efb474ba2 (patch) | |
tree | af996a109c5aee95726fe47b9db7f8c22eab815d | |
parent | ebe2119d87eb0f115219a7ebea604700d2544372 (diff) |
tracing/kprobes: Allow to create probe with a module name
starting with a digit (bsc#1120336).
-rw-r--r-- | patches.fixes/tracing-kprobes-allow-to-create-probe-with-a-module-name-starting-with-a-digit.patch | 73 | ||||
-rw-r--r-- | series.conf | 1 |
2 files changed, 74 insertions, 0 deletions
diff --git a/patches.fixes/tracing-kprobes-allow-to-create-probe-with-a-module-name-starting-with-a-digit.patch b/patches.fixes/tracing-kprobes-allow-to-create-probe-with-a-module-name-starting-with-a-digit.patch new file mode 100644 index 0000000000..82ad842892 --- /dev/null +++ b/patches.fixes/tracing-kprobes-allow-to-create-probe-with-a-module-name-starting-with-a-digit.patch @@ -0,0 +1,73 @@ +From: Sabrina Dubroca <sd@queasysnail.net> +Date: Thu, 22 Jun 2017 11:24:42 +0200 +Subject: tracing/kprobes: Allow to create probe with a module name starting + with a digit +Git-commit: 9e52b32567126fe146f198971364f68d3bc5233f +Patch-mainline: v4.12 +References: bsc#1120336 + +Always try to parse an address, since kstrtoul() will safely fail when +given a symbol as input. If that fails (which will be the case for a +symbol), try to parse a symbol instead. + +This allows creating a probe such as: + + p:probe/vlan_gro_receive 8021q:vlan_gro_receive+0 + +Which is necessary for this command to work: + + perf probe -m 8021q -a vlan_gro_receive + +Link: http://lkml.kernel.org/r/fd72d666f45b114e2c5b9cf7e27b91de1ec966f1.1498122881.git.sd@queasysnail.net + +Cc: stable@vger.kernel.org +Fixes: 413d37d1e ("tracing: Add kprobe-based event tracer") +Acked-by: Masami Hiramatsu <mhiramat@kernel.org> +Signed-off-by: Sabrina Dubroca <sd@queasysnail.net> +Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> +Acked-by: Miroslav Benes <mbenes@suse.cz> +--- + kernel/trace/trace_kprobe.c | 21 ++++++++------------- + 1 file changed, 8 insertions(+), 13 deletions(-) + +--- a/kernel/trace/trace_kprobe.c ++++ b/kernel/trace/trace_kprobe.c +@@ -1070,30 +1070,25 @@ static int create_trace_probe(int argc, + pr_info("Probe point is not specified.\n"); + return -EINVAL; + } +- if (isdigit(argv[1][0])) { +- if (is_return) { +- pr_info("Return probe point must be a symbol.\n"); +- return -EINVAL; +- } +- /* an address specified */ +- ret = strict_strtoul(&argv[1][0], 0, (unsigned long *)&addr); +- if (ret) { +- pr_info("Failed to parse address.\n"); +- return ret; +- } +- } else { ++ ++ /* try to parse an address. if that fails, try to read the ++ * input as a symbol. */ ++ if (strict_strtoul(argv[1], 0, (unsigned long *)&addr)) { + /* a symbol specified */ + symbol = argv[1]; + /* TODO: support .init module functions */ + ret = split_symbol_offset(symbol, &offset); + if (ret) { +- pr_info("Failed to parse symbol.\n"); ++ pr_info("Failed to parse either an address or a symbol.\n"); + return ret; + } + if (offset && is_return) { + pr_info("Return probe must be used without offset.\n"); + return -EINVAL; + } ++ } else if (is_return) { ++ pr_info("Return probe point must be a symbol.\n"); ++ return -EINVAL; + } + argc -= 2; argv += 2; + diff --git a/series.conf b/series.conf index cbb3773ebb..1d8df6719d 100644 --- a/series.conf +++ b/series.conf @@ -23189,6 +23189,7 @@ patches.fixes/tracing-fix-check-for-cpu-online-when-event-is-disabled.patch patches.fixes/tracing-move-mutex-to-protect-against-resetting-of-seq-data.patch patches.fixes/tracing-add-undef-to-fix-compile-error.patch + patches.fixes/tracing-kprobes-allow-to-create-probe-with-a-module-name-starting-with-a-digit.patch ######################################################## # KVM patches |