diff options
author | Mark Wielaard <mark@klomp.org> | 2021-10-18 14:35:20 +0200 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2021-10-18 14:35:33 +0200 |
commit | e3e70782a1d1a246844215991bbd2d6b60d0aa41 (patch) | |
tree | a0c9cd162960f857fd5a016205d53dd6100a96c0 | |
parent | c3a6a9dfc6ed0c24ab2d11b2d71f425b479575c9 (diff) | |
download | elfutils-e3e70782a1d1a246844215991bbd2d6b60d0aa41.tar.gz |
libdw: Don't pass NULL to dwarf_peel_type
commit c3a6a9dfc "libdw: Use signedness of subrange type to
determine array bounds" introduced a type check on a DIE which
exposed a latent bug in the get_type function. Even if the type
of a DIE couldn't be determined it would call dwarf_peel_type
on it. The gcc undefined sanitizer would flag this as being
undefined behaviour because the second argument of the function
is marked as non-NULL. Fix this by checking we actually have
a non-NULL type DIE.
Signed-off-by: Mark Wielaard <mark@klomp.org>
-rw-r--r-- | libdw/ChangeLog | 5 | ||||
-rw-r--r-- | libdw/dwarf_aggregate_size.c | 2 |
2 files changed, 6 insertions, 1 deletions
diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 4275b830..311f34b5 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,8 @@ +2021-10-18 Mark Wielaard <mark@klomp.org> + + * dwarf_aggregate_size.c (get_type): Don't pass NULL to + dwarf_peel_type. + 2021-10-06 Mark Wielaard <mark@klomp.org> * dwarf_aggregate_size.c (array_size): Check signedness of child DIE diff --git a/libdw/dwarf_aggregate_size.c b/libdw/dwarf_aggregate_size.c index 96023d69..89f2029e 100644 --- a/libdw/dwarf_aggregate_size.c +++ b/libdw/dwarf_aggregate_size.c @@ -40,7 +40,7 @@ get_type (Dwarf_Die *die, Dwarf_Attribute *attr_mem, Dwarf_Die *type_mem) Dwarf_Die *type = INTUSE(dwarf_formref_die) (INTUSE(dwarf_attr_integrate) (die, DW_AT_type, attr_mem), type_mem); - if (INTUSE(dwarf_peel_type) (type, type) != 0) + if (type == NULL || INTUSE(dwarf_peel_type) (type, type) != 0) return NULL; return type; |