[PATCH 10/12] tracing/probes: Reject empty fetch expression for %pd and %pD

From: Masami Hiramatsu (Google)

Date: Sun Nov 08 2026 - 19:31:21 EST


From: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>

When an argument ends with :%pd or :%pD but has an empty target fetch
expression (such as ":%pd" or "name=:%pd"), traceprobe_expand_dentry_args()
still expands it into an invalid nested dereference expression. The
subsequent parser failure then logs an error position pointing into the
expanded internal string past the end of the user's command.

Reject empty %pd and %pD fetch expressions upfront before expansion.

Signed-off-by: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>
---
kernel/trace/trace_probe.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c
index 67453d0121c9..6e4fe9f6c722 100644
--- a/kernel/trace/trace_probe.c
+++ b/kernel/trace/trace_probe.c
@@ -2434,11 +2434,17 @@ int traceprobe_expand_dentry_args(int argc, const char *argv[], char **buf)
if (!tmp)
return -ENOMEM;

+ arg_len = strlen(argv[i]);
+ tmp[arg_len - 4] = '\0';
equal = strchr(tmp, '=');
if (equal)
*equal = '\0';
- arg_len = strlen(argv[i]);
- tmp[arg_len - 4] = '\0';
+ if (*(equal ? equal + 1 : tmp) == '\0') {
+ trace_probe_log_set_index(i + 2);
+ trace_probe_log_err(equal ? equal + 1 - tmp : 0,
+ BAD_FETCH_ARG);
+ return -EINVAL;
+ }
if (argv[i][arg_len - 1] == 'd')
ret = snprintf(tmpbuf + used, bufsize - used,
"%s%s+0x0(+0x%zx(%s)):string",