[lttng-dev] [PATCH lttng-tools 1/2] Fix: Invalid free on session_name when destroying session

Christian Babeux christian.babeux at efficios.com
Wed Aug 15 12:39:30 EDT 2012


The session_name should not be free(3) if the user has specified
a session name on the command line. Also, the caller is responsible to
free the allocated string when calling get_session_name().
Handle both cases gracefully.

Signed-off-by: Christian Babeux <christian.babeux at efficios.com>
---
 src/bin/lttng/commands/destroy.c | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/src/bin/lttng/commands/destroy.c b/src/bin/lttng/commands/destroy.c
index 5b69cb5..7b7ea0e 100644
--- a/src/bin/lttng/commands/destroy.c
+++ b/src/bin/lttng/commands/destroy.c
@@ -28,6 +28,7 @@
 
 #include <common/sessiond-comm/sessiond-comm.h>
 
+static char *opt_session_name;
 static int opt_destroy_all;
 
 enum {
@@ -156,28 +157,32 @@ int cmd_destroy(int argc, const char **argv)
 		goto end;
 	}
 
-	session_name = (char *) poptGetArg(pc);
-
-	/*
-	 * ignore session name in case all
-	 * sessions are to be destroyed
-	 */
+	/* Ignore session name in case all sessions are to be destroyed */
 	if (opt_destroy_all) {
 		ret = destroy_all_sessions();
 		goto end;
 	}
-	if (session_name == NULL) {
-		ret = get_default_session_name(&session_name);
-		if (ret < 0 || session_name == NULL) {
+
+	opt_session_name = (char *) poptGetArg(pc);
+
+	if (opt_session_name == NULL) {
+		/* No session name specified, lookup default */
+		session_name = get_session_name();
+		if (session_name == NULL) {
+			ret = CMD_ERROR;
 			goto end;
 		}
+	} else {
+		session_name = opt_session_name;
 	}
+
 	ret = destroy_session(session_name);
 
 end:
-	poptFreeContext(pc);
-	if (session_name != NULL) {
+	if (opt_session_name == NULL) {
 		free(session_name);
 	}
+
+	poptFreeContext(pc);
 	return ret;
 }
-- 
1.7.11.4




More information about the lttng-dev mailing list