From 23c910e54c8399aceb95704cb2ae1dc5cc981001 Mon Sep 17 00:00:00 2001 From: Jonathan Rajotte Date: Mon, 24 Apr 2017 15:32:15 -0400 Subject: [PATCH] Fix: fail on relayd lookup when finding a relayd is expected MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit An actual relayd lookup error leads to using the code path of a local handling. Since stream->index_file is NULL when expecting a relayd, using the code path for local handling results in an invalid access. Signed-off-by: Jonathan Rajotte Signed-off-by: Jérémie Galarneau --- src/common/consumer/consumer-stream.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/common/consumer/consumer-stream.c b/src/common/consumer/consumer-stream.c index 522b3cd5c..d0b1ddef2 100644 --- a/src/common/consumer/consumer-stream.c +++ b/src/common/consumer/consumer-stream.c @@ -359,18 +359,24 @@ int consumer_stream_write_index(struct lttng_consumer_stream *stream, struct ctf_packet_index *element) { int ret; - struct consumer_relayd_sock_pair *relayd; assert(stream); assert(element); rcu_read_lock(); - relayd = consumer_find_relayd(stream->net_seq_idx); - if (relayd) { - pthread_mutex_lock(&relayd->ctrl_sock_mutex); - ret = relayd_send_index(&relayd->control_sock, element, + if (stream->net_seq_idx != (uint64_t) -1ULL) { + struct consumer_relayd_sock_pair *relayd; + relayd = consumer_find_relayd(stream->net_seq_idx); + if (relayd) { + pthread_mutex_lock(&relayd->ctrl_sock_mutex); + ret = relayd_send_index(&relayd->control_sock, element, stream->relayd_stream_id, stream->next_net_seq_num - 1); - pthread_mutex_unlock(&relayd->ctrl_sock_mutex); + pthread_mutex_unlock(&relayd->ctrl_sock_mutex); + } else { + ERR("Stream %" PRIu64 " relayd ID %" PRIu64 " unknown. Can't write index.", + stream->key, stream->net_seq_idx); + ret = -1; + } } else { if (lttng_index_file_write(stream->index_file, element)) { ret = -1; -- 2.34.1