summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Wielaard <[email protected]>2017-12-29 00:34:14 +0100
committerMark Wielaard <[email protected]>2017-12-29 00:34:14 +0100
commit4af2f2ed9269cd8d99d5c1a2c376e817a65e9e28 (patch)
tree43f3f74bc3a9bde8b191f1e842b262c55d762ec4
parent0d100f63db640c533748a7adaa099499b2d2d4b0 (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/ChangeLog4
-rw-r--r--libdw/dwarf_offdie.c4
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;