diff --git a/linux-ramdump-parser-v2/parsers/debug_image.py b/linux-ramdump-parser-v2/parsers/debug_image.py index 6e3df41b386ea89b6510b9378bd6a8fe066395bf..3354c7fb975718f72703c2d41bff92bba65a501f 100644 --- a/linux-ramdump-parser-v2/parsers/debug_image.py +++ b/linux-ramdump-parser-v2/parsers/debug_image.py @@ -156,7 +156,13 @@ class DebugImage(RamParser): mem_dump_data + dump_table_ptr_offset) version = self.ramdump.read_word(dump_table + version_offset) + if version is None: + print_out_str('Version is bogus! Can\'t parse debug image') + return num_entries = self.ramdump.read_word(dump_table + num_entries_offset) + if num_entries is None or num_entries > 100: + print_out_str('num_entries is bogus! Can\'t parse debug image') + return print_out_str('\nDebug image version: {0}.{1} Number of entries {2}'.format( version >> 20, version & 0xFFFFF, num_entries)) diff --git a/linux-ramdump-parser-v2/parsers/irqstate.py b/linux-ramdump-parser-v2/parsers/irqstate.py index 357d3606b7ec2e66fc1e53e0bf54acbf99035e27..c0357d3730c8cf38ff6e15ce7673ede7de125626 100644 --- a/linux-ramdump-parser-v2/parsers/irqstate.py +++ b/linux-ramdump-parser-v2/parsers/irqstate.py @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. +# Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 and @@ -92,6 +92,9 @@ class IrqParse(RamParser): node_addr = ram_dump.read_word(root_addr + rnode_offset) & 0xfffffffe height = ram_dump.read_word(node_addr + rnode_height_offset) + if height > len(height_to_maxindex): + return None + if index > height_to_maxindex[height]: return None @@ -126,6 +129,10 @@ class IrqParse(RamParser): print_out_str( '{0:4} {1} {2:30} {3:10}'.format('IRQ', cpu_str, 'Name', 'Chip')) + + if nr_irqs > 50000: + return + for i in range(0, nr_irqs): irq_desc = self.radix_tree_lookup_element( ram_dump, irq_desc_tree, i) @@ -137,6 +144,9 @@ class IrqParse(RamParser): kstat_irqs_addr = ram_dump.read_word(irq_desc + kstat_irqs_offset) irq_stats_str = '' + if kstat_irqs_addr is None: + break + for j in ram_dump.iter_cpus(): irq_statsn = ram_dump.read_word(kstat_irqs_addr, cpu=j) irq_stats_str = irq_stats_str + \ diff --git a/linux-ramdump-parser-v2/parsers/pagetracking.py b/linux-ramdump-parser-v2/parsers/pagetracking.py index f18a27b066e3a09822c63656868ed0ffe7f5823e..f444830ff47047bc678414a6af367ffe20d5169a 100644 --- a/linux-ramdump-parser-v2/parsers/pagetracking.py +++ b/linux-ramdump-parser-v2/parsers/pagetracking.py @@ -1,4 +1,4 @@ -# Copyright (c) 2012, The Linux Foundation. All rights reserved. +# Copyright (c) 2012,2014 The Linux Foundation. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 and @@ -11,7 +11,7 @@ from print_out import print_out_str from parser_util import register_parser, RamParser - +from mm import pfn_to_page @register_parser('--print-pagetracking', 'print page tracking information (if available)') class PageTracking(RamParser): diff --git a/linux-ramdump-parser-v2/parsers/rtb.py b/linux-ramdump-parser-v2/parsers/rtb.py index f2517f1bbbc0acdddfb6f9226f5ad54028c8446b..c06ad65d1e30066b84a429f45bed958b2d315e89 100644 --- a/linux-ramdump-parser-v2/parsers/rtb.py +++ b/linux-ramdump-parser-v2/parsers/rtb.py @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. +# Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 and @@ -155,6 +155,8 @@ class RTB(RamParser): while True: ptr = rtb_read_ptr + next_entry * rtb_entry_size stamp = self.ramdump.read_word(ptr + rtb_idx_offset) + if stamp is None: + break rtb_out.write('{0:x} '.format(stamp).encode('ascii', 'ignore')) item = self.ramdump.read_byte(ptr + rtb_logtype_offset) item = item & 0x7F diff --git a/linux-ramdump-parser-v2/ramdump.py b/linux-ramdump-parser-v2/ramdump.py index 4c0fa2a6aec3174f9809c80519fdd06d8e9cc082..e6700f51198556f99effa2404c6c486619b0a600 100644 --- a/linux-ramdump-parser-v2/ramdump.py +++ b/linux-ramdump-parser-v2/ramdump.py @@ -76,7 +76,10 @@ class RamDump(): self.ramdump = ramdump i = 0 for addr in range(start, end, 8): - (a, b) = ramdump.read_string(addr, '<II') + r = ramdump.read_string(addr, '<II') + if r is None: + break + (a, b) = r self.unwind_table.append((a, b, start + 8 * i)) i += 1