libdwfl: Make sure that ph_buffer_size has room for at least one phdr
authorMark Wielaard <mark@klomp.org>
Sun, 19 Dec 2021 19:23:30 +0000 (20:23 +0100)
committerMark Wielaard <mark@klomp.org>
Sun, 19 Dec 2021 19:23:30 +0000 (20:23 +0100)
dwfl_segment_report_module might otherwise try to handle half a phdr
taking the other half from after the buffer.

Signed-off-by: Mark Wielaard <mark@klomp.org>
libdwfl/ChangeLog
libdwfl/dwfl_segment_report_module.c

index d00ce70..38e2bda 100644 (file)
@@ -1,5 +1,10 @@
 2021-12-08  Mark Wielaard  <mark@klomp.org>
 
+       * dwfl_segment_report_module.c (dwfl_segment_report_module): Make sure
+       that ph_buffer_size has room for at least one phdr.
+
+2021-12-08  Mark Wielaard  <mark@klomp.org>
+
        * dwfl_segment_report_module.c (dwfl_segment_report_module): Make
        sure the note len increases each iteration.
 
index 89e0510..840d6f4 100644 (file)
@@ -426,7 +426,12 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
      buffer, otherwise it will be the size of the new buffer that
      could be read.  */
   if (ph_buffer_size != 0)
-    xlatefrom.d_size = ph_buffer_size;
+    {
+      phnum = ph_buffer_size / phentsize;
+      if (phnum == 0)
+       goto out;
+      xlatefrom.d_size = ph_buffer_size;
+    }
 
   xlatefrom.d_buf = ph_buffer;