Thread (18 messages) 18 messages, 4 authors, 2021-01-24

Re: [PATCH 1/3] elf_symtab: Add support for SHN_XINDEX index to elf_section_by_name

From: Jiri Olsa <hidden>
Date: 2021-01-21 23:35:51
Also in: netdev

On Thu, Jan 21, 2021 at 03:10:25PM -0800, Andrii Nakryiko wrote:
On Thu, Jan 21, 2021 at 12:24 PM Jiri Olsa [off-list ref] wrote:
quoted
In case the elf's header e_shstrndx contains SHN_XINDEX,
we need to call elf_getshdrstrndx to get the proper
string table index.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
 dutil.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/dutil.c b/dutil.c
index 7b667647420f..9e0fdca3ae04 100644
--- a/dutil.c
+++ b/dutil.c
@@ -179,13 +179,17 @@ Elf_Scn *elf_section_by_name(Elf *elf, GElf_Ehdr *ep,
 {
        Elf_Scn *sec = NULL;
        size_t cnt = 1;
+       size_t str_idx;
+
+       if (elf_getshdrstrndx(elf, &str_idx))
+               return NULL;

        while ((sec = elf_nextscn(elf, sec)) != NULL) {
                char *str;

                gelf_getshdr(sec, shp);
-               str = elf_strptr(elf, ep->e_shstrndx, shp->sh_name);
-               if (!strcmp(name, str)) {
+               str = elf_strptr(elf, str_idx, shp->sh_name);
+               if (str && !strcmp(name, str)) {
if (!str) would be an error? should we bail out here?
seems like if elf_nextscn returns NULL, it will be the case for all the
sections in here.. but bailing out on (!str) is more direct and safer

I'll send an update

thanks,
jirka
quoted
                        if (index)
                                *index = cnt;
                        break;
--
2.27.0
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help