From e7f8eff3a01708a32fc2a475b88420ab21ed821f Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Fri, 8 Nov 2019 17:45:20 -0500 Subject: [PATCH] Fix: relayd: disallow 0-length session names for 2.4+ peers MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The group-by-session-name feature assumes sessions are named for peers more recent than 2.3. Enforce this assumption at session creation time. Signed-off-by: Jérémie Galarneau --- src/bin/lttng-relayd/cmd-2-11.c | 4 ++++ src/bin/lttng-relayd/cmd-2-4.c | 4 ++++ src/bin/lttng-relayd/session.h | 1 + 3 files changed, 9 insertions(+) diff --git a/src/bin/lttng-relayd/cmd-2-11.c b/src/bin/lttng-relayd/cmd-2-11.c index 0da8d2834..4b6f39120 100644 --- a/src/bin/lttng-relayd/cmd-2-11.c +++ b/src/bin/lttng-relayd/cmd-2-11.c @@ -78,6 +78,10 @@ int cmd_create_session_2_11(const struct lttng_buffer_view *payload, ret = -ENAMETOOLONG; ERR("Length of session name (%" PRIu32 " bytes) received in create_session command exceeds maximum length (%d bytes)", header.session_name_len, LTTNG_NAME_MAX); goto error; + } else if (header.session_name_len == 0) { + ret = -EINVAL; + ERR("Illegal session name length of 0 received"); + goto error; } if (header.hostname_len > LTTNG_HOST_NAME_MAX) { ret = -ENAMETOOLONG; diff --git a/src/bin/lttng-relayd/cmd-2-4.c b/src/bin/lttng-relayd/cmd-2-4.c index e20a838da..008be4cf0 100644 --- a/src/bin/lttng-relayd/cmd-2-4.c +++ b/src/bin/lttng-relayd/cmd-2-4.c @@ -52,6 +52,10 @@ int cmd_create_session_2_4(const struct lttng_buffer_view *payload, ret = -ENAMETOOLONG; ERR("Session name too long"); goto error; + } else if (len == 0) { + ret = -EINVAL; + ERR("Session name can't be of length 0"); + goto error; } strncpy(session_name, session_info.session_name, LTTNG_NAME_MAX); diff --git a/src/bin/lttng-relayd/session.h b/src/bin/lttng-relayd/session.h index 288672dcc..8d60ed95f 100644 --- a/src/bin/lttng-relayd/session.h +++ b/src/bin/lttng-relayd/session.h @@ -53,6 +53,7 @@ struct relay_session { */ lttng_uuid sessiond_uuid; LTTNG_OPTIONAL(time_t) creation_time; + /* Must _not_ be empty for 2.4+ peers. */ char session_name[LTTNG_NAME_MAX]; char hostname[LTTNG_HOST_NAME_MAX]; char base_path[LTTNG_PATH_MAX]; -- 2.34.1