diff options
author | Mark Wielaard <mjw@redhat.com> | 2015-05-19 12:58:49 +0200 |
---|---|---|
committer | Mark Wielaard <mjw@redhat.com> | 2015-05-27 23:04:31 +0200 |
commit | 08e5ae6fc821553d1b81d7e7bc41bfd6f0071967 (patch) | |
tree | 5820aafe2ef61bea054b6e78fe33362047f6b488 /libdwfl | |
parent | 251f1459aa54c55e2fe51f5499709253984b99a5 (diff) | |
download | elfutils-08e5ae6fc821553d1b81d7e7bc41bfd6f0071967.tar.gz |
libdwfl: Don't stack allocate alternate_name in dwfl_linux_kernel_find_elf.
Signed-off-by: Mark Wielaard <mjw@redhat.com>
Diffstat (limited to 'libdwfl')
-rw-r--r-- | libdwfl/ChangeLog | 5 | ||||
-rw-r--r-- | libdwfl/linux-kernel-modules.c | 9 |
2 files changed, 13 insertions, 1 deletions
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index d06d34df..ef039730 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,5 +1,10 @@ 2015-05-19 Mark Wielaard <mjw@redhat.com> + * linux-kernel-modules.c (dwfl_linux_kernel_find_elf): malloc and + free alternate_name. + +2015-05-19 Mark Wielaard <mjw@redhat.com> + * linux-kernel-modules.c (dwfl_linux_kernel_report_offline): Don't stack allocate name. Only change chars up to suffix. diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c index cb568680..236e2cd2 100644 --- a/libdwfl/linux-kernel-modules.c +++ b/libdwfl/linux-kernel-modules.c @@ -707,7 +707,12 @@ dwfl_linux_kernel_find_elf (Dwfl_Module *mod, two files when either a '_' or '-' appears in a module name, one using only '_' and one only using '-'. */ - char alternate_name[namelen + 1]; + char *alternate_name = malloc (namelen + 1); + if (unlikely (alternate_name == NULL)) + { + free (modulesdir[0]); + return ENOMEM; + } inline bool subst_name (char from, char to) { const char *n = memchr (module_name, from, namelen); @@ -757,6 +762,7 @@ dwfl_linux_kernel_find_elf (Dwfl_Module *mod, *file_name = strdup (f->fts_path); fts_close (fts); free (modulesdir[0]); + free (alternate_name); if (fd < 0) free (*file_name); else if (*file_name == NULL) @@ -782,6 +788,7 @@ dwfl_linux_kernel_find_elf (Dwfl_Module *mod, fts_close (fts); free (modulesdir[0]); + free (alternate_name); errno = error; return -1; } |