diff options
author | Mark Wielaard <mjw@redhat.com> | 2015-06-06 23:40:42 +0200 |
---|---|---|
committer | Mark Wielaard <mjw@redhat.com> | 2015-06-09 22:55:13 +0200 |
commit | 73b186aa6e9f3ddf2dd6963f55e678e8e954eb03 (patch) | |
tree | 0e6f572c3fec77112cb6eda81a6a91c3703e3716 /libdwfl | |
parent | 93d895970ddd4cd9c0392ab16bad94def1a8ff70 (diff) | |
download | elfutils-73b186aa6e9f3ddf2dd6963f55e678e8e954eb03.tar.gz |
libdwfl: Fix memory leak in find_debuginfo_in_path.
commit c4f133 libdwfl: find_debuginfo_in_patch don't alloca/strdupa
strings of unknown size. Introduced a memory leak in the case nothing
was found. Make sure before returning all temporary strings are all
freed.
Signed-off-by: Mark Wielaard <mjw@redhat.com>
Diffstat (limited to 'libdwfl')
-rw-r--r-- | libdwfl/ChangeLog | 5 | ||||
-rw-r--r-- | libdwfl/find-debuginfo.c | 18 |
2 files changed, 13 insertions, 10 deletions
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 956ac9ff..a5253e26 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,5 +1,10 @@ 2015-06-06 Mark Wielaard <mjw@redhat.com> + * find-debuginfo.c (find_debuginfo_in_path): Always free localpath, + localname and file_dirname. + +2015-06-06 Mark Wielaard <mjw@redhat.com> + * derelocate.c (cache_sections): Free sortrefs. 2015-06-05 Mark Wielaard <mjw@redhat.com> diff --git a/libdwfl/find-debuginfo.c b/libdwfl/find-debuginfo.c index 9b911c1e..c5233548 100644 --- a/libdwfl/find-debuginfo.c +++ b/libdwfl/find-debuginfo.c @@ -293,19 +293,13 @@ find_debuginfo_in_path (Dwfl_Module *mod, const char *file_name, } continue; default: - { - fail_free: - free (localpath); - free (localname); - free (file_dirname); - return -1; - } + goto fail_free; } - free (localpath); - free (localname); - free (file_dirname); if (validate (mod, fd, check, debuglink_crc)) { + free (localpath); + free (localname); + free (file_dirname); *debuginfo_file_name = fname; return fd; } @@ -315,6 +309,10 @@ find_debuginfo_in_path (Dwfl_Module *mod, const char *file_name, /* No dice. */ errno = 0; +fail_free: + free (localpath); + free (localname); + free (file_dirname); return -1; } |