[lttng-dev] [PATCH lttng-tools 1/2] Fix: fail on relayd lookup when finding a relayd is expected

Jérémie Galarneau jeremie.galarneau at efficios.com
Mon May 8 15:44:10 UTC 2017


Merged with minor changes in master, stable-2.10 and stable-2.9.

Thanks,
Jérémie

On 8 May 2017 at 11:22, Jonathan Rajotte
<jonathan.rajotte-julien at efficios.com> wrote:
> 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 result in an null access.
>
> Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien at efficios.com>
> ---
>  src/common/consumer/consumer-stream.c | 19 +++++++++++++------
>  1 file changed, 13 insertions(+), 6 deletions(-)
>
> diff --git a/src/common/consumer/consumer-stream.c b/src/common/consumer/consumer-stream.c
> index 522b3cd5..23654d38 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;
> @@ -378,6 +384,7 @@ int consumer_stream_write_index(struct lttng_consumer_stream *stream,
>                         ret = 0;
>                 }
>         }
> +
>         if (ret < 0) {
>                 goto error;
>         }
> --
> 2.11.0
>



-- 
Jérémie Galarneau
EfficiOS Inc.
http://www.efficios.com


More information about the lttng-dev mailing list