X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Frelayd%2Frelayd.c;h=fade4b11ed56bc77750bfaed592008c9655e8b33;hb=6dcd74cf9c4cce229b1c205ca05d8efcf4c4bceb;hp=ccb23c065ca7aaeb8037fc30a42016fd7c9c9f3b;hpb=a4baae1b0463bc4ce65c2a458c4a941e7fabc594;p=lttng-tools.git diff --git a/src/common/relayd/relayd.c b/src/common/relayd/relayd.c index ccb23c065..fade4b11e 100644 --- a/src/common/relayd/relayd.c +++ b/src/common/relayd/relayd.c @@ -15,7 +15,7 @@ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#define _GNU_SOURCE +#define _LGPL_SOURCE #include #include #include @@ -25,6 +25,7 @@ #include #include +#include #include #include @@ -57,6 +58,7 @@ static int send_command(struct lttcomm_relayd_sock *rsock, goto alloc_error; } + memset(&header, 0, sizeof(header)); header.cmd = htobe32(cmd); header.data_size = htobe64(size); @@ -127,7 +129,15 @@ static int relayd_create_session_2_4(struct lttcomm_relayd_sock *rsock, int ret; struct lttcomm_relayd_create_session_2_4 msg; + if (strlen(session_name) >= sizeof(msg.session_name)) { + ret = -1; + goto error; + } strncpy(msg.session_name, session_name, sizeof(msg.session_name)); + if (strlen(hostname) >= sizeof(msg.hostname)) { + ret = -1; + goto error; + } strncpy(msg.hostname, hostname, sizeof(msg.hostname)); msg.live_timer = htobe32(session_live_timer); msg.snapshot = htobe32(snapshot); @@ -244,7 +254,16 @@ int relayd_add_stream(struct lttcomm_relayd_sock *rsock, const char *channel_nam /* Compat with relayd 2.1 */ if (rsock->minor == 1) { + memset(&msg, 0, sizeof(msg)); + if (strlen(channel_name) >= sizeof(msg.channel_name)) { + ret = -1; + goto error; + } strncpy(msg.channel_name, channel_name, sizeof(msg.channel_name)); + if (strlen(pathname) >= sizeof(msg.pathname)) { + ret = -1; + goto error; + } strncpy(msg.pathname, pathname, sizeof(msg.pathname)); /* Send command */ @@ -253,8 +272,17 @@ int relayd_add_stream(struct lttcomm_relayd_sock *rsock, const char *channel_nam goto error; } } else { + memset(&msg_2_2, 0, sizeof(msg_2_2)); /* Compat with relayd 2.2+ */ + if (strlen(channel_name) >= sizeof(msg_2_2.channel_name)) { + ret = -1; + goto error; + } strncpy(msg_2_2.channel_name, channel_name, sizeof(msg_2_2.channel_name)); + if (strlen(pathname) >= sizeof(msg_2_2.pathname)) { + ret = -1; + goto error; + } strncpy(msg_2_2.pathname, pathname, sizeof(msg_2_2.pathname)); msg_2_2.tracefile_size = htobe64(tracefile_size); msg_2_2.tracefile_count = htobe64(tracefile_count); @@ -364,6 +392,7 @@ int relayd_version_check(struct lttcomm_relayd_sock *rsock) DBG("Relayd version check for major.minor %u.%u", rsock->major, rsock->minor); + memset(&msg, 0, sizeof(msg)); /* Prepare network byte order before transmission. */ msg.major = htobe32(rsock->major); msg.minor = htobe32(rsock->minor); @@ -565,6 +594,7 @@ int relayd_send_close_stream(struct lttcomm_relayd_sock *rsock, uint64_t stream_ DBG("Relayd closing stream id %" PRIu64, stream_id); + memset(&msg, 0, sizeof(msg)); msg.stream_id = htobe64(stream_id); msg.last_net_seq_num = htobe64(last_net_seq_num); @@ -614,6 +644,7 @@ int relayd_data_pending(struct lttcomm_relayd_sock *rsock, uint64_t stream_id, DBG("Relayd data pending for stream id %" PRIu64, stream_id); + memset(&msg, 0, sizeof(msg)); msg.stream_id = htobe64(stream_id); msg.last_net_seq_num = htobe64(last_net_seq_num); @@ -662,6 +693,7 @@ int relayd_quiescent_control(struct lttcomm_relayd_sock *rsock, DBG("Relayd checking quiescent control state"); + memset(&msg, 0, sizeof(msg)); msg.stream_id = htobe64(metadata_stream_id); /* Send command */ @@ -706,6 +738,7 @@ int relayd_begin_data_pending(struct lttcomm_relayd_sock *rsock, uint64_t id) DBG("Relayd begin data pending"); + memset(&msg, 0, sizeof(msg)); msg.session_id = htobe64(id); /* Send command */ @@ -753,6 +786,7 @@ int relayd_end_data_pending(struct lttcomm_relayd_sock *rsock, uint64_t id, DBG("Relayd end data pending"); + memset(&msg, 0, sizeof(msg)); msg.session_id = htobe64(id); /* Send command */ @@ -805,6 +839,7 @@ int relayd_send_index(struct lttcomm_relayd_sock *rsock, DBG("Relayd sending index for stream ID %" PRIu64, relay_stream_id); + memset(&msg, 0, sizeof(msg)); msg.relay_stream_id = htobe64(relay_stream_id); msg.net_seq_num = htobe64(net_seq_num);