From 1ad1103bedd3f87c3cbe151e1ef61fbaceaa0f4c Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Fri, 15 Nov 2019 17:16:32 -0500 Subject: [PATCH] Fix: relayd: check for a trace chunk before writing a packet MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Protocol errors can cause a packet to be written to a stream that doesn't have an active trace chunk. Validate this condition for the init and write packet operations on a stream. Signed-off-by: Jérémie Galarneau --- src/bin/lttng-relayd/stream.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/bin/lttng-relayd/stream.c b/src/bin/lttng-relayd/stream.c index 9d753bd0a..35ed262d6 100644 --- a/src/bin/lttng-relayd/stream.c +++ b/src/bin/lttng-relayd/stream.c @@ -955,6 +955,14 @@ int stream_init_packet(struct relay_stream *stream, size_t packet_size, int ret = 0; ASSERT_LOCKED(stream->lock); + + if (!stream->stream_fd || !stream->trace_chunk) { + ERR("Protocol error: received a packet for a stream that doesn't have a current trace chunk: stream_id = %" PRIu64 ", channel_name = %s", + stream->stream_handle, stream->channel_name); + ret = -1; + goto end; + } + if (caa_likely(stream->tracefile_size == 0)) { /* No size limit set; nothing to check. */ goto end; @@ -1020,6 +1028,12 @@ int stream_write(struct relay_stream *stream, memset(padding_buffer, 0, min(sizeof(padding_buffer), padding_to_write)); + if (!stream->stream_fd || !stream->trace_chunk) { + ERR("Protocol error: received a packet for a stream that doesn't have a current trace chunk: stream_id = %" PRIu64 ", channel_name = %s", + stream->stream_handle, stream->channel_name); + ret = -1; + goto end; + } if (packet) { write_ret = lttng_write(stream->stream_fd->fd, packet->data, packet->size); -- 2.34.1