Skip to content

Commit e38e2c6

Browse files
committed
tracing/probes: Fix to update dynamic data counter if fetcharg uses it
Fix to update dynamic data counter ('dyndata') and max length ('maxlen') only if the fetcharg uses the dynamic data. Also get out arg->dynamic from unlikely(). This makes dynamic data address wrong if process_fetch_insn() returns error on !arg->dynamic case. Link: https://lore.kernel.org/all/168908494781.123124.8160245359962103684.stgit@devnote2/ Suggested-by: Steven Rostedt <rostedt@goodmis.org> Link: https://lore.kernel.org/all/20230710233400.5aaf024e@gandalf.local.home/ Fixes: 9178412 ("tracing: probeevent: Return consumed bytes of dynamic area") Cc: stable@vger.kernel.org Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
1 parent b41326b commit e38e2c6

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

kernel/trace/trace_probe_tmpl.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -267,11 +267,13 @@ store_trace_args(void *data, struct trace_probe *tp, void *rec,
267267
if (unlikely(arg->dynamic))
268268
*dl = make_data_loc(maxlen, dyndata - base);
269269
ret = process_fetch_insn(arg->code, rec, dl, base);
270-
if (unlikely(ret < 0 && arg->dynamic)) {
271-
*dl = make_data_loc(0, dyndata - base);
272-
} else {
273-
dyndata += ret;
274-
maxlen -= ret;
270+
if (arg->dynamic) {
271+
if (unlikely(ret < 0)) {
272+
*dl = make_data_loc(0, dyndata - base);
273+
} else {
274+
dyndata += ret;
275+
maxlen -= ret;
276+
}
275277
}
276278
}
277279
}

0 commit comments

Comments
 (0)