diff mbox series

trace-cmd library: Use clock local if no clock is found when creating buffer

Message ID 20220404111919.3883e905@gandalf.local.home (mailing list archive)
State Accepted
Commit 651cd9257e407423f5886b6e66d352b10ca72d5d
Headers show
Series trace-cmd library: Use clock local if no clock is found when creating buffer | expand

Commit Message

Steven Rostedt April 4, 2022, 3:19 p.m. UTC
From: "Steven Rostedt (Google)" <rostedt@goodmis.org>

Using restore to put together a trace.dat file from reading trace_pipe_raw
with a cat, and copying over the tracing/events and proc/kallsyms
directory from one machine to another and running trace-cmd on it.

Here's the scenario. On a machine with just a busybox environment.

 # cd /sys/kernel/tracing/per_cpu
 # for cpu in cpu*; do
 #   cat $cpu/trace_pipe_raw > /tmp/read_${cpu} &
 # done
 # mkdir /tmp/tracing
 # cp -a /sys/kernel/tracing/events /tmp/tracing
 # cp /proc/kallsyms /tmp
 # cd tmp
 # echo 0 > /sys/kernel/tracing/tracing_on
 # tar cvzf trace-dat.tgz read_cpu* tracing kallsyms

Then on another machine:

 $ scp target:/tmp/trace-dat.tgz /tmp
 $ cd /tmp
 $ tar xvzf /tmp/trace-dat.tgz
 $ trace-cmd restore -c -o trace-head.dat -k /tmp/kallsyms -t /tmp/tracing
 $ trace-cmd restore -o trace-target.dat -i trace-head.dat read_cpu*

The above ends with a segfault because get_clock() fails and then NULL
gets passed to strlen() and crashes.

Just set it to "local" and warn about it.

Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
 lib/trace-cmd/trace-output.c | 4 ++++
 1 file changed, 4 insertions(+)
diff mbox series

Patch

diff --git a/lib/trace-cmd/trace-output.c b/lib/trace-cmd/trace-output.c
index 73020ff1fda1..f3a203ec347f 100644
--- a/lib/trace-cmd/trace-output.c
+++ b/lib/trace-cmd/trace-output.c
@@ -2139,6 +2139,10 @@  out_add_buffer_option(struct tracecmd_output *handle, const char *name,
 		return NULL;
 
 	clock = get_clock(handle);
+	if (!clock) {
+		tracecmd_warning("Could not find clock, set to 'local'");
+		clock = "local";
+	}
 
 	/*
 	 * Buffer flyrecord option: