We forgot to free scns when returning ELF_E_NOMEM. Signed-off-by: Mark Wielaard <m...@redhat.com> --- libelf/ChangeLog | 4 ++++ libelf/elf32_updatefile.c | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 871e697..8209afa 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,7 @@ +2016-02-13 Mark Wielaard <m...@redhat.com> + + * elf32_updatefile.c (updatemmap): Free scns when out of memory. + 2016-02-12 Mark Wielaard <m...@redhat.com> * elf.h: Update from glibc. Add NT_ARM_SYSTEM_CALL. diff --git a/libelf/elf32_updatefile.c b/libelf/elf32_updatefile.c index 0909219..d0fabb1 100644 --- a/libelf/elf32_updatefile.c +++ b/libelf/elf32_updatefile.c @@ -1,5 +1,5 @@ /* Write changed data structures. - Copyright (C) 2000-2010, 2014, 2015 Red Hat, Inc. + Copyright (C) 2000-2010, 2014, 2015, 2016 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <drep...@redhat.com>, 2000. @@ -269,6 +269,7 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum) void *p = malloc (sizeof (ElfW2(LIBELFBITS,Shdr))); if (unlikely (p == NULL)) { + free (scns); __libelf_seterrno (ELF_E_NOMEM); return -1; } @@ -295,6 +296,7 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum) void *p = malloc (scn->data_list.data.d.d_size); if (unlikely (p == NULL)) { + free (scns); __libelf_seterrno (ELF_E_NOMEM); return -1; } -- 2.5.0