diff options
author | Roland McGrath <roland@redhat.com> | 2008-04-06 01:57:32 +0000 |
---|---|---|
committer | Roland McGrath <roland@redhat.com> | 2008-04-06 01:57:32 +0000 |
commit | bfc01703fe30815b450526ebcfbb37ec9f5fe9c7 (patch) | |
tree | da9fc99627a845a672cb689c4f3836b2df43bd3d | |
parent | 60982e6e9da662cf5c9d12c6d095738a9b2dcf68 (diff) | |
download | elfutils-bfc01703fe30815b450526ebcfbb37ec9f5fe9c7.tar.gz |
libdwfl/
* linux-proc-maps.c (proc_maps_report): Don't leak LAST_FILE.
-rw-r--r-- | libdwfl/ChangeLog | 8 | ||||
-rw-r--r-- | libdwfl/dwfl_module_getdwarf.c | 4 | ||||
-rw-r--r-- | libdwfl/dwfl_module_report_build_id.c | 5 | ||||
-rw-r--r-- | libdwfl/linux-proc-maps.c | 12 |
4 files changed, 18 insertions, 11 deletions
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 265720ae..734571ca 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,11 @@ +2008-04-05 Roland McGrath <roland@redhat.com> + + * linux-proc-maps.c (proc_maps_report): Don't leak LAST_FILE. + + * dwfl_module_getdwarf.c (find_file): Always free build_id_bits. + Clear it after freeing. + * dwfl_module_report_build_id.c (dwfl_module_report_build_id): Likewise. + 2008-03-26 Roland McGrath <roland@redhat.com> * dwfl_module_getdwarf.c (load_symtab): Don't return success for diff --git a/libdwfl/dwfl_module_getdwarf.c b/libdwfl/dwfl_module_getdwarf.c index 38bffe58..bc20d94f 100644 --- a/libdwfl/dwfl_module_getdwarf.c +++ b/libdwfl/dwfl_module_getdwarf.c @@ -123,8 +123,8 @@ find_file (Dwfl_Module *mod) { /* Clear any explicitly reported build ID, just in case it was wrong. We'll fetch it from the file when asked. */ - if (mod->build_id_len > 0) - free (mod->build_id_bits); + free (mod->build_id_bits); + mod->build_id_bits = NULL; mod->build_id_len = 0; } } diff --git a/libdwfl/dwfl_module_report_build_id.c b/libdwfl/dwfl_module_report_build_id.c index 4886931b..9a1b14f7 100644 --- a/libdwfl/dwfl_module_report_build_id.c +++ b/libdwfl/dwfl_module_report_build_id.c @@ -1,5 +1,5 @@ /* Report build ID information for a module. - Copyright (C) 2007 Red Hat, Inc. + Copyright (C) 2007, 2008 Red Hat, Inc. This file is part of Red Hat elfutils. Red Hat elfutils is free software; you can redistribute it and/or modify @@ -90,8 +90,7 @@ dwfl_module_report_build_id (Dwfl_Module *mod, memcpy (copy, bits, len); } - if (mod->build_id_len > 0) - free (mod->build_id_bits); + free (mod->build_id_bits); mod->build_id_bits = copy; mod->build_id_len = len; diff --git a/libdwfl/linux-proc-maps.c b/libdwfl/linux-proc-maps.c index 6eaed39a..b4bb6cfc 100644 --- a/libdwfl/linux-proc-maps.c +++ b/libdwfl/linux-proc-maps.c @@ -1,5 +1,5 @@ /* Standard libdwfl callbacks for debugging a live Linux process. - Copyright (C) 2005, 2007 Red Hat, Inc. + Copyright (C) 2005, 2007, 2008 Red Hat, Inc. This file is part of Red Hat elfutils. Red Hat elfutils is free software; you can redistribute it and/or modify @@ -138,12 +138,12 @@ proc_maps_report (Dwfl *dwfl, FILE *f, GElf_Addr sysinfo_ehdr, pid_t pid) { if (last_file != NULL) { - if (INTUSE(dwfl_report_module) (dwfl, last_file, low, high) == NULL) - { - free (last_file); - return true; - } + Dwfl_Module *mod = INTUSE(dwfl_report_module) (dwfl, last_file, + low, high); + free (last_file); last_file = NULL; + if (unlikely (mod == NULL)) + return true; } return false; } |