summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wielaard <mjw@redhat.com>2015-05-19 12:58:49 +0200
committerMark Wielaard <mjw@redhat.com>2015-05-27 23:04:31 +0200
commit08e5ae6fc821553d1b81d7e7bc41bfd6f0071967 (patch)
tree5820aafe2ef61bea054b6e78fe33362047f6b488
parent251f1459aa54c55e2fe51f5499709253984b99a5 (diff)
downloadelfutils-08e5ae6fc821553d1b81d7e7bc41bfd6f0071967.tar.gz
libdwfl: Don't stack allocate alternate_name in dwfl_linux_kernel_find_elf.
Signed-off-by: Mark Wielaard <mjw@redhat.com>
-rw-r--r--libdwfl/ChangeLog5
-rw-r--r--libdwfl/linux-kernel-modules.c9
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;
}