diff options
author | Mark Wielaard <mark@klomp.org> | 2019-01-22 15:55:18 +0100 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2019-01-22 18:12:38 +0100 |
commit | a17c2c0917901ffa542ac4d3e327d46742219e04 (patch) | |
tree | fe68f5c8a569f04e63bfa880c77ee33c9f7708bf | |
parent | 2562759d6fe5b364fe224852e64e8bda39eb2e35 (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/ChangeLog | 5 | ||||
-rw-r--r-- | src/readelf.c | 3 |
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]) |