Fix: Invalid free on session_name when destroying session
authorChristian Babeux <christian.babeux@efficios.com>
Wed, 15 Aug 2012 16:39:30 +0000 (12:39 -0400)
committerDavid Goulet <dgoulet@efficios.com>
Thu, 16 Aug 2012 19:38:05 +0000 (15:38 -0400)
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.

Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
src/bin/lttng/commands/destroy.c

index 5b69cb5d9b45e54f7f7877f859bde66eb5febd54..7b7ea0e8028cec3f15e160f4f2c374079982fc5f 100644 (file)
@@ -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;
 }
This page took 0.034993 seconds and 4 git commands to generate.