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 /src | |
parent | fd67ed02ba43ebe54a037c04cfa94c7ab6b84205 (diff) | |
download | latrace-78a0f66ec27ba1750249a1590dbdbef69dd254a6.tar.gz latrace-78a0f66ec27ba1750249a1590dbdbef69dd254a6.tar.xz latrace-78a0f66ec27ba1750249a1590dbdbef69dd254a6.zip |
fix memory leak in the argument display code
Diffstat (limited to 'src')
-rw-r--r-- | src/audit.c | 27 |
1 files changed, 14 insertions, 13 deletions
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; } |