From 1f93ecadba6e529cce70dfa4b05055c33232d577 Mon Sep 17 00:00:00 2001
From: Laura Abbott <lauraa@codeaurora.org>
Date: Tue, 15 Apr 2014 19:10:47 -0700
Subject: [PATCH] linux-ramdump-parser-v2: Check for cycles in pagetypeinfo

Because pages are constantly being allocated and freed, the pagetypeinfo
may not be in a consistent state when dumps are collected. Check
to make sure there are no cycles in the list for more than just the
next item.

Change-Id: Ie986bbb78f39923dbe11ef0446912518bc6c7fc5
---
 linux-ramdump-parser-v2/parsers/pagetypeinfo.py | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/linux-ramdump-parser-v2/parsers/pagetypeinfo.py b/linux-ramdump-parser-v2/parsers/pagetypeinfo.py
index 841d57d..ea6c245 100644
--- a/linux-ramdump-parser-v2/parsers/pagetypeinfo.py
+++ b/linux-ramdump-parser-v2/parsers/pagetypeinfo.py
@@ -47,17 +47,18 @@ class Pagetypeinfo(RamParser):
                 curr = orig_free_list
                 pg_count = -1
                 first = True
+                seen = []
                 while True:
                     pg_count = pg_count + 1
+                    seen.append(curr)
                     next_p = ramdump.read_word(curr)
-                    if next_p == curr:
-                        if not first:
-                            is_corrupt = True
-                        break
                     first = False
                     curr = next_p
                     if curr == orig_free_list:
                         break
+                    if next_p in seen:
+                        is_corrupt = True
+                        break
                 nums = nums + ('{0:6}'.format(pg_count))
                 total_type_bytes = total_type_bytes + \
                     pg_count * 4096 * (2 ** order)
-- 
GitLab