Make sure ar_sym is always freed and set to NULL on error.

        * libelf/elf_getarsym.c (elf_getarsym): Free ar_sym on
        temp_data malloc failures.

Signed-off-by: Mark Wielaard <[email protected]>
---
 libelf/elf_getarsym.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/libelf/elf_getarsym.c b/libelf/elf_getarsym.c
index 2ba867ec9826..92af9645338a 100644
--- a/libelf/elf_getarsym.c
+++ b/libelf/elf_getarsym.c
@@ -212,6 +212,8 @@ elf_getarsym (Elf *elf, size_t *ptr)
              temp_data = malloc (sz);
              if (unlikely (temp_data == NULL))
                {
+                 free (elf->state.ar.ar_sym);
+                 elf->state.ar.ar_sym = NULL;
                  __libelf_seterrno (ELF_E_NOMEM);
                  goto out;
                }
@@ -255,6 +257,8 @@ elf_getarsym (Elf *elf, size_t *ptr)
                  temp_data = malloc (sz);
                  if (unlikely (temp_data == NULL))
                    {
+                     free (elf->state.ar.ar_sym);
+                     elf->state.ar.ar_sym = NULL;
                      __libelf_seterrno (ELF_E_NOMEM);
                      goto out;
                    }
-- 
2.56.0

Reply via email to