From: Mark Wielaard Date: Sat, 25 Apr 2020 23:41:27 +0000 (+0200) Subject: libdw: Call Dwarf oom_handler() when malloc fails in __libdw_alloc_tail. X-Git-Tag: elfutils-0.180~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5436c7529dd9b24f62e3df10e30d5da53da16efd;p=thirdparty%2Felfutils.git libdw: Call Dwarf oom_handler() when malloc fails in __libdw_alloc_tail. GCC10 -fanalyzer found a possibly-NULL dereference after a failed malloc in __libdw_alloc_tail. In this case we should call the Dwarf oom_handler as is done in other places where an essential malloc call fails. The oom_handler cannot return and will likely just abort. Signed-off-by: Mark Wielaard --- diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 39730fbc7..75fc8f062 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,8 @@ +2020-04-25 Mark Wielaard + + * libdw_alloc.c (__libdw_alloc_tail): Call Dwarf oom_handler() + when malloc fails. + 2020-04-17 Mark Wielaard * dwarf_begin_elf.c (check_section): Handle .gnu.debuglto_ prefix. diff --git a/libdw/libdw_alloc.c b/libdw/libdw_alloc.c index e0281a3df..b3e533434 100644 --- a/libdw/libdw_alloc.c +++ b/libdw/libdw_alloc.c @@ -87,6 +87,11 @@ __libdw_alloc_tail (Dwarf *dbg) if (result == NULL) { result = malloc (dbg->mem_default_size); + if (result == NULL) + { + pthread_rwlock_unlock (&dbg->mem_rwl); + dbg->oom_handler(); + } result->size = dbg->mem_default_size - offsetof (struct libdw_memblock, mem); result->remaining = result->size;