diff options
author | Jiri Olsa <Jiri Olsa jolsa@redhat.com> | 2011-04-06 13:52:14 +0200 |
---|---|---|
committer | Jiri Olsa <Jiri Olsa jolsa@redhat.com> | 2011-04-06 13:52:14 +0200 |
commit | 78a0f66ec27ba1750249a1590dbdbef69dd254a6 (patch) | |
tree | a69c7e2b0c3b224a04d8ad7a3d58cbeb3654fd79 | |
parent | fd67ed02ba43ebe54a037c04cfa94c7ab6b84205 (diff) | |
download | latrace-78a0f66ec27ba1750249a1590dbdbef69dd254a6.tar.gz latrace-78a0f66ec27ba1750249a1590dbdbef69dd254a6.tar.xz latrace-78a0f66ec27ba1750249a1590dbdbef69dd254a6.zip |
fix memory leak in the argument display code
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | src/audit.c | 27 |
2 files changed, 17 insertions, 13 deletions
@@ -1,3 +1,6 @@ +2011-04-06 Jiri Olsa <olsajiri@gmail.com> + * fix memory leak in the argument display code + 2011-04-05 Jiri Olsa <olsajiri@gmail.com> * fix controled config bug - missing shared config assignment * moving conf header files to new location + rename s/conf/h/ diff --git a/src/audit.c b/src/audit.c index 5f9071f..7f94fc5 100644 --- a/src/audit.c +++ b/src/audit.c @@ -70,6 +70,16 @@ static int check_flow_below(const char *symname, int in) return ret; } +static void free_argbuf(int argret, char *argbuf, char *argdbuf) +{ + if (argret) + return; + + free(argbuf); + if (lt_sh(&cfg, args_detailed) && (*argdbuf)) + free(argdbuf); +} + static int sym_entry(const char *symname, void *ptr, char *lib_from, char *lib_to, La_regs *regs) { @@ -104,6 +114,7 @@ static int sym_entry(const char *symname, void *ptr, len = lt_fifo_msym_get(&cfg, buf, FIFO_MSG_TYPE_ENTRY, &tv, (char*) symname, lib_to, argbuf, argdbuf); + free_argbuf(argret, argbuf, argdbuf); return lt_fifo_send(&cfg, pipe_fd, buf, len); } @@ -114,12 +125,7 @@ static int sym_entry(const char *symname, void *ptr, symname, lib_to, argbuf, argdbuf); - if (!argret) { - free(argbuf); - if (lt_sh(&cfg, args_detailed) && (*argdbuf)) - free(argdbuf); - } - + free_argbuf(argret, argbuf, argdbuf); return 0; } @@ -156,6 +162,7 @@ static int sym_exit(const char *symname, void *ptr, len = lt_fifo_msym_get(&cfg, buf, FIFO_MSG_TYPE_EXIT, &tv, (char*) symname, lib_to, argbuf, argdbuf); + free_argbuf(argret, argbuf, argdbuf); return lt_fifo_send(&cfg, pipe_fd, buf, len); } @@ -166,13 +173,7 @@ static int sym_exit(const char *symname, void *ptr, indent_depth--; - if (!argret) { - free(argbuf); - - if (lt_sh(&cfg, args_detailed) && (*argdbuf)) - free(argdbuf); - } - + free_argbuf(argret, argbuf, argdbuf); return 0; } |