[lttng-dev] [PATCH lttng-tools] Fix: Memory leak on error paths of relay_add_stream

David Goulet dgoulet at efficios.com
Thu Mar 21 13:32:47 EDT 2013


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 <christian.babeux at efficios.com>
> ---
>  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) {



More information about the lttng-dev mailing list