From: Mark Wielaard Date: Sat, 27 Apr 2019 21:58:57 +0000 (+0200) Subject: libdw: Reject DW_OP_implicit_value in CFI. X-Git-Tag: elfutils-0.177~30 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2b55f157cd74278c0c01e8605de3bbb160d3bde4;p=thirdparty%2Felfutils.git libdw: Reject DW_OP_implicit_value in CFI. When we encounter a DW_OP_implicit_value we call store_implicit_value () which will try to store the value as part of the Dwarf dbg. But if we are examining CFI there will be no Dwarf dbg. And DW_OP_implicit_value should not be part of CFI. So explicitly reject it in store_implicit_value if dbg is NULL. Signed-off-by: Mark Wielaard --- diff --git a/libdw/ChangeLog b/libdw/ChangeLog index aaa629601..22fdab3d0 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,8 @@ +2019-04-27 Mark Wielaard + + * dwarf_getlocation.c (store_implicit_value): Check dbg isn't + NULL. + 2019-02-02 Mark Wielaard * dwarf_nextcu.c (__libdw_next_unit): Define bytes_end. diff --git a/libdw/dwarf_getlocation.c b/libdw/dwarf_getlocation.c index fc59a2ab5..ae3f511ed 100644 --- a/libdw/dwarf_getlocation.c +++ b/libdw/dwarf_getlocation.c @@ -125,6 +125,8 @@ loc_compare (const void *p1, const void *p2) static int store_implicit_value (Dwarf *dbg, void **cache, Dwarf_Op *op) { + if (dbg == NULL) + return -1; struct loc_block_s *block = libdw_alloc (dbg, struct loc_block_s, sizeof (struct loc_block_s), 1); const unsigned char *data = (const unsigned char *) (uintptr_t) op->number2;