Prior to commit d4b0848b ("libdw: dwarf_getsrcfiles should not imply
dwarf_getsrclines") debug_str_offset was initialized with a default
value of 0.  This default initialization was removed as part of the
refactor introduced in d4b0848b.

Restore debug_str_offset's default initialization to 0.  For a
well-formed binary, it wasn't possible to use debug_str_offset
uninitialized.  The value is only relevant for line headers using
NVIDIA's CUBIN extension, in which case the real offset was always
stored in debug_str_offset before use.  However it's possible for a
malformed binary to cause uninitialized use and static analyzers
may complain about this.

Signed-off-by: Aaron Merey <[email protected]>
---
 libdw/dwarf_getsrclines.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c
index b3fe7cc8..35215119 100644
--- a/libdw/dwarf_getsrclines.c
+++ b/libdw/dwarf_getsrclines.c
@@ -279,6 +279,10 @@ read_line_header (Dwarf *dbg, unsigned address_size,
   /* The opcode base.  */
   lh->opcode_base = *linep++;
 
+  /* If the line header uses the NVIDIA CUBIN extension, debug_str_offset's
+     actual value will be read from the last 4 bytes of the header.  */
+  lh->debug_str_offset = 0;
+
   /* Remember array with the standard opcode length (-1 to account for
      the opcode with value zero not being mentioned).  */
   lh->standard_opcode_lengths = linep - 1;
-- 
2.54.0

Reply via email to