We tried to read the str_offsets header length and only then checked
if there were any bytes left. Make sure to check there are at least 4
bytes for the initial unit length.
* libdw/libdwP.h (str_offsets_base_off): Check before initial
unit_length read.
https://sourceware.org/bugzilla/show_bug.cgi?id=34383
Reported-by: Karan Kurani <[email protected]>
Signed-off-by: Mark Wielaard <[email protected]>
---
libdw/libdwP.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/libdw/libdwP.h b/libdw/libdwP.h
index 628777b069da..5e1029bd2ac2 100644
--- a/libdw/libdwP.h
+++ b/libdw/libdwP.h
@@ -1282,6 +1282,8 @@ str_offsets_base_off (Dwarf *dbg, Dwarf_CU *cu)
uint64_t unit_length;
uint16_t version;
+ if (unlikely (readendp - readp < 4))
+ goto no_header;
unit_length = read_4ubyte_unaligned_inc (dbg, readp);
if (unlikely (unit_length == 0xffffffff))
{
--
2.55.0