summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland McGrath <roland@redhat.com>2008-04-06 01:57:32 +0000
committerRoland McGrath <roland@redhat.com>2008-04-06 01:57:32 +0000
commitbfc01703fe30815b450526ebcfbb37ec9f5fe9c7 (patch)
treeda9fc99627a845a672cb689c4f3836b2df43bd3d
parent60982e6e9da662cf5c9d12c6d095738a9b2dcf68 (diff)
downloadelfutils-bfc01703fe30815b450526ebcfbb37ec9f5fe9c7.tar.gz
libdwfl/
* linux-proc-maps.c (proc_maps_report): Don't leak LAST_FILE.
-rw-r--r--libdwfl/ChangeLog8
-rw-r--r--libdwfl/dwfl_module_getdwarf.c4
-rw-r--r--libdwfl/dwfl_module_report_build_id.c5
-rw-r--r--libdwfl/linux-proc-maps.c12
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;
}