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.10.10~8 X-Git-Url: http://git.liburcu.org/?p=lttng-tools.git;a=commitdiff_plain;h=0b2374eb38d39fa112bfac06f5140b06b33e221b 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 898c0de6a..0a770187a 100644 --- a/src/bin/lttng/commands/list.c +++ b/src/bin/lttng/commands/list.c @@ -1601,7 +1601,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); @@ -1614,7 +1614,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 */ @@ -1622,7 +1622,7 @@ static int list_sessions(const char *session_name) } if (ret) { ret = CMD_ERROR; - goto error; + goto end; } } else { /* Pretty print */ @@ -1665,7 +1665,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) { @@ -1673,9 +1673,8 @@ static int list_sessions(const char *session_name) } } -error: - free(sessions); end: + free(sessions); return ret; }