Fix: validate expanded path NULL ptr in relayd
[lttng-tools.git] / src / bin / lttng-relayd / main.c
index 4f9d74274943fdc433ed31c6ab60b6b05e4d5258..082eb7975efd0adb1c41bfbfee65c621dd34abeb 100644 (file)
@@ -734,6 +734,10 @@ char *create_output_path_noauto(char *path_name)
        char *full_path;
 
        full_path = utils_expand_path(opt_output_path);
+       if (!full_path) {
+               goto exit;
+       }
+
        ret = asprintf(&traces_path, "%s/%s", full_path, path_name);
        if (ret < 0) {
                PERROR("asprintf trace dir name");
@@ -941,6 +945,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 +968,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) {
This page took 0.02333 seconds and 4 git commands to generate.