From 4af2f2ed9269cd8d99d5c1a2c376e817a65e9e28 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 29 Dec 2017 00:34:14 +0100 Subject: [PATCH] libdw: Check there is .debug_info/types section data in __libdw_offdie. If a Dwarf_Die was requested from an offset into a section data that didn't exist we would crash. Crashing is bad even if given bad input. Just return an error in that case. Signed-off-by: Mark Wielaard --- libdw/ChangeLog | 4 ++++ libdw/dwarf_offdie.c | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/libdw/ChangeLog b/libdw/ChangeLog index eb1cb70..97155de 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,7 @@ +2017-12-28 Mark Wielaard + + * dwarf_offdie.c (__libdw_offdie): Check sectiondata exists. + 2017-05-09 Ulf Hermann Mark Wielaard diff --git a/libdw/dwarf_offdie.c b/libdw/dwarf_offdie.c index 15f55c2..883720d 100644 --- a/libdw/dwarf_offdie.c +++ b/libdw/dwarf_offdie.c @@ -1,5 +1,5 @@ /* Return DIE at given offset. - Copyright (C) 2002-2010 Red Hat, Inc. + Copyright (C) 2002-2010, 2017 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2002. @@ -45,7 +45,7 @@ __libdw_offdie (Dwarf *dbg, Dwarf_Off offset, Dwarf_Die *result, Elf_Data *const data = dbg->sectiondata[debug_types ? IDX_debug_types : IDX_debug_info]; - if (offset >= data->d_size) + if (data == NULL || offset >= data->d_size) { __libdw_seterrno (DWARF_E_INVALID_DWARF); return NULL; -- 2.7.4