From d544c5cfb43064711924b357bed7f70cca50a5a3 Mon Sep 17 00:00:00 2001
From: Osvaldo Banuelos <osvaldob@codeaurora.org>
Date: Tue, 3 Jan 2017 13:10:13 -0800
Subject: [PATCH] lrdp-v2: cpr3_info: sanity check CPR controller pointer

Check the validity of the CPR controller pointer to make sure
parsing is attempted only on actual CPR controller structures.

CRs-Fixed: 1085156
Change-Id: Ie0970cd5458d169768f4c065cc5ee79e8ad93160
---
 linux-ramdump-parser-v2/parsers/cpr3_info.py | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/linux-ramdump-parser-v2/parsers/cpr3_info.py b/linux-ramdump-parser-v2/parsers/cpr3_info.py
index ca5d9dd..3f0be29 100644
--- a/linux-ramdump-parser-v2/parsers/cpr3_info.py
+++ b/linux-ramdump-parser-v2/parsers/cpr3_info.py
@@ -430,9 +430,19 @@ class CPR3Info(RamParser):
         else:
             cpr_mode = "closed-loop"
 
-        tmp = ""
-        if cpr_controller_name is None:
+        thread_addr = self.ramdump.read_word(
+            ctrl_addr +
+            self.ramdump.field_offset(
+                'struct cpr3_controller', 'thread'))
+        if thread_addr is None:
             return
+        thread_ctrl_addr = self.ramdump.read_word(
+            thread_addr +
+            self.ramdump.field_offset('struct cpr3_thread', 'ctrl'))
+
+        if cpr_controller_name is None or thread_ctrl_addr != ctrl_addr:
+            return
+        tmp = ""
         tmp += "=" * 80 + "\n"
         tmp += 'CPR3 controller state: %s\n' % cpr_controller_name
         tmp += "=" * 80 + "\n"
@@ -464,10 +474,6 @@ class CPR3Info(RamParser):
             self.output.append("\nCPR aggregated voltages:\n")
             self.dump_cpr3_corner_info(aggr_corner_addr, 0, 0, 0)
 
-        thread_addr = self.ramdump.read_word(
-            ctrl_addr +
-            self.ramdump.field_offset(
-                'struct cpr3_controller', 'thread'))
         thread_count = self.ramdump.read_int(
             ctrl_addr +
             self.ramdump.field_offset(
-- 
GitLab