Skip to content
Snippets Groups Projects
Commit 9936510f authored by Laura Abbott's avatar Laura Abbott
Browse files

linux-ramdump-parser-v2: Don't recurse while list walking

Many of the lists are very large and may overflow if traversed
recursively. Switch to an iterative method instead.

Change-Id: I8bf476eefae7e223a16fdd50bb9b10d7c24cb247
parent 075c0a75
No related branches found
No related tags found
No related merge requests found
...@@ -33,16 +33,22 @@ class ListWalker(object): ...@@ -33,16 +33,22 @@ class ListWalker(object):
self.seen_nodes = [] self.seen_nodes = []
def walk(self, node_addr, func, extra=None): def walk(self, node_addr, func, extra=None):
if node_addr != 0:
while True:
if node_addr == 0:
break
func(node_addr - self.list_elem_offset, extra) func(node_addr - self.list_elem_offset, extra)
next_node_addr = node_addr + self.ram_dump.field_offset('struct list_head', 'next') next_node_addr = node_addr + self.ram_dump.field_offset('struct list_head', 'next')
next_node = self.ram_dump.read_word(next_node_addr) next_node = self.ram_dump.read_word(next_node_addr)
if next_node != self.last_node: if next_node == self.last_node:
if next_node in self.seen_nodes: break
print_out_str(
'[!] WARNING: Cycle found in list. List is corrupted!') if next_node in self.seen_nodes:
else: print_out_str(
self.seen_nodes.append(node_addr) '[!] WARNING: Cycle found in attach list. List is corrupted!')
self.walk(next_node, func, extra) break
node_addr = next_node
self.seen_nodes.append(node_addr)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment