Merged all 7!

David

Christian Babeux:
> On error paths the memory allocated for stream is never freed.
> 
> Also, fix undefined behavior on asprintf alloc failure. According to
> asprintf(3), the content of the pointer passed to it is undefined if
> an alloc failure occurs, so we could end up freeing a pointer in an
> undefined state. Force its value to NULL.
> 
> Signed-off-by: Christian Babeux <[email protected]>
> ---
>  src/bin/lttng-relayd/main.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/src/bin/lttng-relayd/main.c b/src/bin/lttng-relayd/main.c
> index 4f9d742..00b7ea3 100644
> --- a/src/bin/lttng-relayd/main.c
> +++ b/src/bin/lttng-relayd/main.c
> @@ -941,6 +941,7 @@ int relay_add_stream(struct lttcomm_relayd_hdr *recv_hdr,
>       ret = asprintf(&path, "%s/%s", root_path, stream_info.channel_name);
>       if (ret < 0) {
>               PERROR("asprintf stream path");
> +             path = NULL;
>               goto end;
>       }
>  
> @@ -963,13 +964,17 @@ int relay_add_stream(struct lttcomm_relayd_hdr 
> *recv_hdr,
>  end:
>       free(path);
>       free(root_path);
> +
> +     reply.handle = htobe64(stream->stream_handle);
>       /* send the session id to the client or a negative return code on error 
> */
>       if (ret < 0) {
>               reply.ret_code = htobe32(LTTNG_ERR_UNK);
> +             /* stream was not properly added to the ht, so free it */
> +             free(stream);
>       } else {
>               reply.ret_code = htobe32(LTTNG_OK);
>       }
> -     reply.handle = htobe64(stream->stream_handle);
> +
>       send_ret = cmd->sock->ops->sendmsg(cmd->sock, &reply,
>                       sizeof(struct lttcomm_relayd_status_stream), 0);
>       if (send_ret < 0) {

_______________________________________________
lttng-dev mailing list
[email protected]
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to