From: David Goulet Date: Mon, 25 Mar 2013 18:41:22 +0000 (-0400) Subject: Fix: session name max length was not handled correctly X-Git-Tag: v2.2.0-rc1~31 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=487b253b3ec9f187b4c1b425b246e8e74e5ac309;p=lttng-tools.git Fix: session name max length was not handled correctly Fixes #435 Signed-off-by: David Goulet --- diff --git a/src/bin/lttng/commands/create.c b/src/bin/lttng/commands/create.c index 5588d4267..b7d9af52e 100644 --- a/src/bin/lttng/commands/create.c +++ b/src/bin/lttng/commands/create.c @@ -183,7 +183,7 @@ static int create_session(void) int ret; char *session_name = NULL, *traces_path = NULL, *alloc_path = NULL; char *alloc_url = NULL, *url = NULL, datetime[16]; - char session_name_date[NAME_MAX], *print_str_url = NULL; + char session_name_date[NAME_MAX + 17], *print_str_url = NULL; time_t rawtime; struct tm *timeinfo; @@ -203,6 +203,12 @@ static int create_session(void) session_name = session_name_date; DBG("Auto session name set to %s", session_name_date); } else { + if (strlen(opt_session_name) > NAME_MAX) { + ERR("Session name too long. Length must be lower or equal to %d", + NAME_MAX); + ret = LTTNG_ERR_SESSION_FAIL; + goto error; + } if (strncmp(opt_session_name, DEFAULT_SESSION_NAME, strlen(DEFAULT_SESSION_NAME)) == 0 && strlen(opt_session_name) == strlen(DEFAULT_SESSION_NAME)) { diff --git a/src/bin/lttng/commands/set_session.c b/src/bin/lttng/commands/set_session.c index a428aed16..1f79d6cf0 100644 --- a/src/bin/lttng/commands/set_session.c +++ b/src/bin/lttng/commands/set_session.c @@ -60,6 +60,13 @@ static int set_session(void) { int ret = CMD_SUCCESS; + if (opt_session_name && strlen(opt_session_name) > NAME_MAX) { + ERR("Session name too long. Length must be lower or equal to %d", + NAME_MAX); + ret = CMD_ERROR; + goto error; + } + ret = config_init(opt_session_name); if (ret < 0) { ERR("Unable to set session name"); diff --git a/src/bin/lttng/conf.c b/src/bin/lttng/conf.c index 7439c1cdc..b6632fcb1 100644 --- a/src/bin/lttng/conf.c +++ b/src/bin/lttng/conf.c @@ -40,6 +40,7 @@ char *config_get_file_path(char *path) ret = asprintf(&file_path, "%s/%s", path, CONFIG_FILENAME); if (ret < 0) { ERR("Fail allocating config file path"); + file_path = NULL; } return file_path; @@ -248,14 +249,16 @@ found: int config_add_session_name(char *path, char *name) { int ret; - char session_name[NAME_MAX]; + char *attr = "session="; + /* Max name len accepted plus attribute's len and the NULL byte. */ + char session_name[NAME_MAX + strlen(attr) + 1]; /* * With GNU C < 2.1, snprintf returns -1 if the target buffer is too small; * With GNU C >= 2.1, snprintf returns the required size (excluding closing null) */ - ret = snprintf(session_name, NAME_MAX, "session=%s\n", name); - if ((ret < 0) || (ret >= NAME_MAX)) { + ret = snprintf(session_name, sizeof(session_name), "%s%s\n", attr, name); + if (ret < 0) { ret = -1; goto error; }