summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2019-01-22 15:55:18 +0100
committerMark Wielaard <mark@klomp.org>2019-01-22 18:12:38 +0100
commita17c2c0917901ffa542ac4d3e327d46742219e04 (patch)
treefe68f5c8a569f04e63bfa880c77ee33c9f7708bf
parent2562759d6fe5b364fe224852e64e8bda39eb2e35 (diff)
readelf: Don't go past end of line data reading unknown opcode parameters.
https://sourceware.org/bugzilla/show_bug.cgi?id=24116 Signed-off-by: Mark Wielaard <mark@klomp.org>
-rw-r--r--src/ChangeLog5
-rw-r--r--src/readelf.c3
2 files changed, 7 insertions, 1 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 4ad12a96..0ea106c5 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2019-01-22 Mark Wielaard <mark@klomp.org>
+
+ * readelf.c (print_debug_line_section): Check we are not at end of
+ line data when reading parameters for unknown opcodes.
+
2019-01-20 Mark Wielaard <mark@klomp.org>
* readelf.c (print_debug_line_section): Check terminating NUL byte
diff --git a/src/readelf.c b/src/readelf.c
index 6bad3bfe..e3e699c4 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -8845,7 +8845,8 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
" unknown opcode with %" PRIu8 " parameters:",
standard_opcode_lengths[opcode]),
standard_opcode_lengths[opcode]);
- for (int n = standard_opcode_lengths[opcode]; n > 0; --n)
+ for (int n = standard_opcode_lengths[opcode];
+ n > 0 && linep < lineendp; --n)
{
get_uleb128 (u128, linep, lineendp);
if (n != standard_opcode_lengths[opcode])