From: Heather McIntyre Date: Tue, 10 Oct 2023 13:42:47 +0000 (+0200) Subject: libelf: Fix deadlock in __libelf_readall X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fdf452658f1962fbb781a130969cc74f9f0c56a7;p=thirdparty%2Felfutils.git libelf: Fix deadlock in __libelf_readall * libelf/elf_readall.c (__libelf_readall): Move rwlock_unlock before libelf_acquire_all. Signed-off-by: Heather S. McIntyre Signed-off-by: Mark Wielaard --- diff --git a/libelf/elf_readall.c b/libelf/elf_readall.c index d0f9a28c..2d62d447 100644 --- a/libelf/elf_readall.c +++ b/libelf/elf_readall.c @@ -84,6 +84,7 @@ __libelf_readall (Elf *elf) /* If this is an archive and we have derived descriptors get the locks for all of them. */ + rwlock_unlock(elf->lock); // lock will be reacquired next line libelf_acquire_all (elf); if (elf->maximum_size == ~((size_t) 0)) @@ -141,10 +142,8 @@ __libelf_readall (Elf *elf) __libelf_seterrno (ELF_E_NOMEM); /* Free the locks on the children. */ - libelf_release_all (elf); + libelf_release_all (elf); // lock is released } - rwlock_unlock (elf->lock); - return (char *) elf->map_address; }