[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