From 03cc4222e775081794bbf4b69cbcef883a02e181 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Mon, 17 Feb 2020 16:58:00 -0500 Subject: [PATCH] Fix: lib: don't assume that streams have packets in auto seek We get a segmentation fault when trying to instantiate a trimmer downstream of a component that creates streams without packets. The reason is that the line changed by this patch assumes that events are always within packets. However, it is possible (since 26fc5aedf "lib: make packets and packet messages optional, disabled by default") for stream to not use packets. In that situation, the `packet` field of `event_msg->event` will be NULL. Fix it by using `event_msg->event->stream`, which is expected to be the same thing as `event_msg->event->packet->stream`, in the case where the stream uses packets. A test exercising this is added by a following patch in this series. The stack at the point of the crash is the following: #0 0x7f2235db23ab in auto_seek_handle_message /home/smarchi/src/babeltrace/src/lib/graph/iterator.c:1419 #1 0x7f2235db330a in find_message_ge_ns_from_origin /home/smarchi/src/babeltrace/src/lib/graph/iterator.c:1567 #2 0x7f2235db4b1a in bt_message_iterator_seek_ns_from_origin /home/smarchi/src/babeltrace/src/lib/graph/iterator.c:1790 #3 0x7f2230abf6a4 in state_seek_initially /home/smarchi/src/babeltrace/src/plugins/utils/trimmer/trimmer.c:1095 #4 0x7f2230ac2f3b in trimmer_msg_iter_next /home/smarchi/src/babeltrace/src/plugins/utils/trimmer/trimmer.c:1920 #5 0x7f2235dae530 in call_iterator_next_method /home/smarchi/src/babeltrace/src/lib/graph/iterator.c:808 #6 0x7f2235daefc6 in bt_message_iterator_next /home/smarchi/src/babeltrace/src/lib/graph/iterator.c:855 #7 0x7f2230d1b458 in details_consume /home/smarchi/src/babeltrace/src/plugins/text/details/details.c:476 #8 0x7f2235da3d61 in consume_graph_sink /home/smarchi/src/babeltrace/src/lib/graph/graph.c:456 #9 0x7f2235da40e0 in consume_sink_node /home/smarchi/src/babeltrace/src/lib/graph/graph.c:498 #10 0x7f2235da4875 in consume_no_check /home/smarchi/src/babeltrace/src/lib/graph/graph.c:572 #11 0x7f2235da510b in bt_graph_run /home/smarchi/src/babeltrace/src/lib/graph/graph.c:636 #12 0x563a71c8127a in cmd_run /home/smarchi/src/babeltrace/src/cli/babeltrace2.c:2503 #13 0x563a71c8218a in main /home/smarchi/src/babeltrace/src/cli/babeltrace2.c:2691 #14 0x7f22351f2b96 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b96) #15 0x563a71c73709 in _start (/home/smarchi/build/babeltrace/src/cli/.libs/babeltrace2+0x1f709) Change-Id: Ic7ed3927d5ad1ca04833248a97723f0d8c4e4907 Signed-off-by: Simon Marchi Reviewed-on: https://review.lttng.org/c/babeltrace/+/3104 Tested-by: jenkins Reviewed-by: Philippe Proulx --- src/lib/graph/iterator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/graph/iterator.c b/src/lib/graph/iterator.c index 0beb6949..3f31f1a0 100644 --- a/src/lib/graph/iterator.c +++ b/src/lib/graph/iterator.c @@ -1416,7 +1416,7 @@ skip_msg: struct auto_seek_stream_state *stream_state; stream_state = g_hash_table_lookup(stream_states, - event_msg->event->packet->stream); + event_msg->event->stream); BT_ASSERT_DBG(stream_state); // HELPME: are we sure that event messages have clock snapshots at this point? -- 2.34.1