This is the mail archive of the elfutils-devel@sourceware.org mailing list for the elfutils project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Don't stack allocate module name. Also fixes a latent bug (if the module file didn't have a suffix - which is very unlikely) and an inefficiency. We only need to substitue chars up to the suffix. Signed-off-by: Mark Wielaard <mjw@redhat.com> --- libdwfl/ChangeLog | 5 +++++ libdwfl/linux-kernel-modules.c | 25 +++++++++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 7fbb914..d06d34d 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +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. + 2015-05-18 Mark Wielaard <mjw@redhat.com> * dwfl_module_getdwarf.c (find_prelink_address_sync): Allocate diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c index e4065d8..66b3ab6 100644 --- a/libdwfl/linux-kernel-modules.c +++ b/libdwfl/linux-kernel-modules.c @@ -1,5 +1,5 @@ /* Standard libdwfl callbacks for debugging the running Linux kernel. - Copyright (C) 2005-2011, 2013, 2014 Red Hat, Inc. + Copyright (C) 2005-2011, 2013, 2014, 2015 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -379,13 +379,16 @@ dwfl_linux_kernel_report_offline (Dwfl *dwfl, const char *release, names. To handle that, we would have to look at the __this_module.name contents in the module's text. */ - char name[f->fts_namelen - suffix + 1]; - for (size_t i = 0; i < f->fts_namelen - 3U; ++i) - if (f->fts_name[i] == '-' || f->fts_name[i] == ',') + char *name = strndup (f->fts_name, f->fts_namelen - suffix); + if (name == NULL) + { + __libdwfl_seterrno (DWFL_E_NOMEM); + result = -1; + break; + } + for (size_t i = 0; i < f->fts_namelen - suffix; ++i) + if (name[i] == '-' || name[i] == ',') name[i] = '_'; - else - name[i] = f->fts_name[i]; - name[f->fts_namelen - suffix] = '\0'; if (predicate != NULL) { @@ -394,17 +397,23 @@ dwfl_linux_kernel_report_offline (Dwfl *dwfl, const char *release, if (want < 0) { result = -1; + free (name); break; } if (!want) - continue; + { + free (name); + continue; + } } if (dwfl_report_offline (dwfl, name, f->fts_path, -1) == NULL) { + free (name); result = -1; break; } + free (name); } continue; -- 1.8.3.1
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |