[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20230609045545.418677-1-naveen@kernel.org>
Date: Fri, 9 Jun 2023 10:25:45 +0530
From: Naveen N Rao <naveen@...nel.org>
To: <linux-trace-kernel@...r.kernel.org>
Cc: Steven Rostedt <rostedt@...dmis.org>,
Masami Hiramatsu <mhiramat@...nel.org>,
Srikar Dronamraju <srikar@...ux.ibm.com>,
<linux-kernel@...r.kernel.org>
Subject: [PATCH] trace/kprobe: Display the actual notrace function when rejecting a probe
Trying to probe update_sd_lb_stats() using perf results in the below
message in the kernel log:
trace_kprobe: Could not probe notrace function _text
This is because 'perf probe' specifies the kprobe location as an offset
from '_text':
$ sudo perf probe -D update_sd_lb_stats
p:probe/update_sd_lb_stats _text+1830728
However, the error message is misleading and doesn't help convey the
actual notrace function that is being probed. Fix this by looking up the
actual function name that is being probed. With this fix, we now get the
below message in the kernel log:
trace_kprobe: Could not probe notrace function update_sd_lb_stats.constprop.0
Signed-off-by: Naveen N Rao <naveen@...nel.org>
---
kernel/trace/trace_kprobe.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index 74adb82331dd81..975daa66fcef59 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -449,9 +449,8 @@ static bool __within_notrace_func(unsigned long addr)
return !ftrace_location_range(addr, addr + size - 1);
}
-static bool within_notrace_func(struct trace_kprobe *tk)
+static bool within_notrace_func(struct trace_kprobe *tk, unsigned long addr)
{
- unsigned long addr = trace_kprobe_address(tk);
char symname[KSYM_NAME_LEN], *p;
if (!__within_notrace_func(addr))
@@ -477,6 +476,8 @@ static bool within_notrace_func(struct trace_kprobe *tk)
/* Internal register function - just handle k*probes and flags */
static int __register_trace_kprobe(struct trace_kprobe *tk)
{
+ unsigned long addr = trace_kprobe_address(tk);
+ char symname[KSYM_NAME_LEN];
int i, ret;
ret = security_locked_down(LOCKDOWN_KPROBES);
@@ -486,9 +487,9 @@ static int __register_trace_kprobe(struct trace_kprobe *tk)
if (trace_kprobe_is_registered(tk))
return -EINVAL;
- if (within_notrace_func(tk)) {
+ if (within_notrace_func(tk, addr)) {
pr_warn("Could not probe notrace function %s\n",
- trace_kprobe_symbol(tk));
+ lookup_symbol_name(addr, symname) ? trace_kprobe_symbol(tk) : symname);
return -EINVAL;
}
base-commit: e46ad59233cf16daf4f3b9dd080003f01ac940fe
--
2.40.1
Powered by blists - more mailing lists