From: Jonathan Rajotte Date: Fri, 25 Oct 2019 21:56:26 +0000 (-0400) Subject: Fix: lttng: initialize sessions pointer to NULL X-Git-Tag: v2.12.0-rc1~264 X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=commitdiff_plain;h=aff0fa7248c73edb8e02578c83e338716cf695ec Fix: lttng: initialize sessions pointer to NULL lttng_list_sessions does not set the passed pointer to NULL on empty return. This leads to a deallocation of an invalid pointer (segfault). For returns of size 0, the value of the passed argument should be considered "undefined". Refactor error handling a bit by removing the "error" jump. Always call free on the 'sessions' object. Fixes #1205 Signed-off-by: Jonathan Rajotte Signed-off-by: Jérémie Galarneau --- diff --git a/src/bin/lttng/commands/list.c b/src/bin/lttng/commands/list.c index 28166c8be..65d8ea6f5 100644 --- a/src/bin/lttng/commands/list.c +++ b/src/bin/lttng/commands/list.c @@ -1825,7 +1825,7 @@ static int list_sessions(const char *session_name) int ret = CMD_SUCCESS; int count, i; unsigned int session_found = 0; - struct lttng_session *sessions; + struct lttng_session *sessions = NULL; count = lttng_list_sessions(&sessions); DBG("Session count %d", count); @@ -1838,7 +1838,7 @@ static int list_sessions(const char *session_name) if (lttng_opt_mi) { /* Mi */ if (session_name == NULL) { - /* List all session */ + /* List all sessions */ ret = mi_list_sessions(sessions, count); } else { /* Note : this return an open session element */ @@ -1846,7 +1846,7 @@ static int list_sessions(const char *session_name) } if (ret) { ret = CMD_ERROR; - goto error; + goto end; } } else { /* Pretty print */ @@ -1893,7 +1893,7 @@ static int list_sessions(const char *session_name) if (!session_found && session_name != NULL) { ERR("Session '%s' not found", session_name); ret = CMD_ERROR; - goto error; + goto end; } if (session_name == NULL) { @@ -1901,9 +1901,8 @@ static int list_sessions(const char *session_name) } } -error: - free(sessions); end: + free(sessions); return ret; }