diff options
author | Mark Wielaard <[email protected]> | 2017-12-29 00:34:14 +0100 |
---|---|---|
committer | Mark Wielaard <[email protected]> | 2017-12-29 00:34:14 +0100 |
commit | 4af2f2ed9269cd8d99d5c1a2c376e817a65e9e28 (patch) | |
tree | 43f3f74bc3a9bde8b191f1e842b262c55d762ec4 | |
parent | 0d100f63db640c533748a7adaa099499b2d2d4b0 (diff) |
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 <[email protected]>
-rw-r--r-- | libdw/ChangeLog | 4 | ||||
-rw-r--r-- | libdw/dwarf_offdie.c | 4 |
2 files changed, 6 insertions, 2 deletions
diff --git a/libdw/ChangeLog b/libdw/ChangeLog index eb1cb709..97155de1 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,7 @@ +2017-12-28 Mark Wielaard <[email protected]> + + * dwarf_offdie.c (__libdw_offdie): Check sectiondata exists. + 2017-05-09 Ulf Hermann <[email protected]> Mark Wielaard <[email protected]> diff --git a/libdw/dwarf_offdie.c b/libdw/dwarf_offdie.c index 15f55c22..883720de 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 <[email protected]>, 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; |