[PATCH 4/4] gelf_getsymshndx.c: Remove locking
Mark Wielaard
mark@klomp.org
Tue Sep 8 14:39:37 GMT 2026
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 <amerey@redhat.com>
> ---
> 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;
> }
More information about the Elfutils-devel
mailing list