Hi Aaron, On Mon, 2026-08-31 at 18:46 -0400, Aaron Merey wrote: > Remove all locking from gelf_getsymshndx. Any elfutils library functions > that change any state associated with gelf_getsymshndx are not to be called > concurrently with gelf_getsymshndx (see THREAD-SAFETY) so no locking is > needed.
This looks sane. If this works for gelf_getsymshndx then I believe it should also work for gelf_getsym and (the not very often used) gelf_getsyminfo. Cheers, Mark > Signed-off-by: Aaron Merey <[email protected]> > --- > libelf/gelf_getsymshndx.c | 11 +++-------- > 1 file changed, 3 insertions(+), 8 deletions(-) > > diff --git a/libelf/gelf_getsymshndx.c b/libelf/gelf_getsymshndx.c > index 534502e3..1be35360 100644 > --- a/libelf/gelf_getsymshndx.c > +++ b/libelf/gelf_getsymshndx.c > @@ -58,8 +58,6 @@ gelf_getsymshndx (Elf_Data *symdata, Elf_Data *shndxdata, > int ndx, > return NULL; > } > > - rwlock_rdlock (symdata_scn->s->elf->lock); > - > /* The user is not required to pass a data descriptor for an extended > section index table. */ > if (likely (shndxdata_scn != NULL)) > @@ -67,7 +65,7 @@ gelf_getsymshndx (Elf_Data *symdata, Elf_Data *shndxdata, > int ndx, > if (INVALID_NDX (ndx, Elf32_Word, &shndxdata_scn->d)) > { > __libelf_seterrno (ELF_E_INVALID_INDEX); > - goto out; > + return NULL; > } > > shndx = ((Elf32_Word *) shndxdata_scn->d.d_buf)[ndx]; > @@ -87,7 +85,7 @@ gelf_getsymshndx (Elf_Data *symdata, Elf_Data *shndxdata, > int ndx, > if (INVALID_NDX (ndx, Elf32_Sym, symdata)) > { > __libelf_seterrno (ELF_E_INVALID_INDEX); > - goto out; > + return NULL; > } > > src = &((Elf32_Sym *) symdata->d_buf)[ndx]; > @@ -116,7 +114,7 @@ gelf_getsymshndx (Elf_Data *symdata, Elf_Data *shndxdata, > int ndx, > if (INVALID_NDX (ndx, GElf_Sym, symdata)) > { > __libelf_seterrno (ELF_E_INVALID_INDEX); > - goto out; > + return NULL; > } > > *dst = ((GElf_Sym *) symdata->d_buf)[ndx]; > @@ -128,8 +126,5 @@ gelf_getsymshndx (Elf_Data *symdata, Elf_Data *shndxdata, > int ndx, > > result = dst; > > - out: > - rwlock_unlock (symdata_scn->s->elf->lock); > - > return result; > }
