From abde22fc65276ce72fbcd932bbe60a7f138db851 Mon Sep 17 00:00:00 2001
From: Olav Haugan <ohaugan@codeaurora.org>
Date: Sat, 1 Jul 2017 13:08:19 -0700
Subject: [PATCH] lrdp_v2: Make ddrcompare work with and without kaslr enabled

Abstract out whether kaslr is enabled or not to allow ddrcompare to work
regardless of whether kaslr is enabled or not.

Change-Id: I4b00ed48748ce9a5a63c0905c99200ac9bfe4482
---
 linux-ramdump-parser-v2/parsers/ddrcompare.py |  4 +--
 linux-ramdump-parser-v2/parsers/ftrace.py     |  5 ++--
 linux-ramdump-parser-v2/ramdump.py            | 25 +++++++++----------
 3 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/linux-ramdump-parser-v2/parsers/ddrcompare.py b/linux-ramdump-parser-v2/parsers/ddrcompare.py
index 5a4866f..6e404dc 100644
--- a/linux-ramdump-parser-v2/parsers/ddrcompare.py
+++ b/linux-ramdump-parser-v2/parsers/ddrcompare.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
+# Copyright (c) 2014-2015, 2017, 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
@@ -45,7 +45,7 @@ class DDRCompare(RamParser) :
                 bitcheck = virtual & 0x3
                 if bitcheck:
                     virtual = virtual - bitcheck
-                physical = self.ramdump.virt_to_phys(virtual)
+                physical = self.ramdump.virt_to_phys(virtual + self.ramdump.get_kaslr_offset())
 
                 magic = hex(self.ramdump.read_u32(physical, False)).rstrip("L").lstrip("0x").zfill(8)
                 if (m.group(2) != magic):
diff --git a/linux-ramdump-parser-v2/parsers/ftrace.py b/linux-ramdump-parser-v2/parsers/ftrace.py
index 90ea076..8c92690 100644
--- a/linux-ramdump-parser-v2/parsers/ftrace.py
+++ b/linux-ramdump-parser-v2/parsers/ftrace.py
@@ -88,8 +88,9 @@ class FtraceParser(RamParser):
 
         crashargs = [crashtool]
 
-        if self.ramdump.kaslr_offset is not None:
-            kaslroffset = "--kaslr={0}".format(hex(self.ramdump.kaslr_offset))
+        kaslr_offset = self.ramdump.get_kaslr_offset()
+        if kaslr_offset != 0:
+            kaslroffset = "--kaslr={0}".format(hex(kaslr_offset))
             crashargs.append(kaslroffset)
 
         if self.ramdump.kimage_voffset is not None:
diff --git a/linux-ramdump-parser-v2/ramdump.py b/linux-ramdump-parser-v2/ramdump.py
index 48778af..a8a7910 100644
--- a/linux-ramdump-parser-v2/ramdump.py
+++ b/linux-ramdump-parser-v2/ramdump.py
@@ -590,9 +590,8 @@ class RamDump():
             self.get_hw_id()
 
         if self.kaslr_offset is None:
-            self.get_kaslr_offset()
-            if self.kaslr_offset is not None:
-                self.gdbmi.kaslr_offset = self.kaslr_offset
+            self.determine_kaslr_offset()
+            self.gdbmi.kaslr_offset = self.get_kaslr_offset()
 
         if options.phys_offset is not None:
             print_out_str(
@@ -624,8 +623,7 @@ class RamDump():
 
         self.kimage_vaddr = self.va_start + self.kasan_shadow_size + \
             modules_vsize
-        if self.kaslr_offset is not None:
-            self.kimage_vaddr = self.kimage_vaddr + self.kaslr_offset
+        self.kimage_vaddr = self.kimage_vaddr + self.get_kaslr_offset()
         self.modules_end = self.page_offset
         self.kimage_voffset = self.address_of("kimage_voffset")
         if self.kimage_voffset is not None:
@@ -1003,8 +1001,9 @@ class RamDump():
                 startup_script.write('mmu.scan\n'.encode('ascii', 'ignore'))
 
         where = os.path.abspath(self.vmlinux)
-        if self.kaslr_offset is not None:
-            where += ' 0x{0:x}'.format(self.kaslr_offset)
+        kaslr_offset = self.get_kaslr_offset()
+        if kaslr_offset != 0:
+            where += ' 0x{0:x}'.format(kaslr_offset)
         dloadelf = 'data.load.elf {} /nocode\n'.format(where)
         startup_script.write(dloadelf.encode('ascii', 'ignore'))
 
@@ -1080,13 +1079,16 @@ class RamDump():
             return self.read_word(self.tz_addr, False)
 
     def get_kaslr_offset(self):
-        if(self.kaslr_addr is None):
+        return self.kaslr_offset
+
+    def determine_kaslr_offset(self):
+        self.kaslr_offset = 0
+        if self.kaslr_addr is None:
             print_out_str('!!!! Kaslr addr is not provided.')
         else:
             kaslr_magic = self.read_u32(self.kaslr_addr, False)
             if kaslr_magic != 0xdead4ead:
                 print_out_str('!!!! Kaslr magic does not match.')
-                self.kaslr_offset = None
             else:
                 self.kaslr_offset = self.read_u64(self.kaslr_addr + 4, False)
                 print_out_str("The kaslr_offset extracted is: " + str(hex(self.kaslr_offset)))
@@ -1210,10 +1212,7 @@ class RamDump():
     def setup_symbol_tables(self):
         stream = os.popen(self.nm_path + ' -n ' + self.vmlinux)
         symbols = stream.readlines()
-        kaslr = 0
-
-        if self.kaslr_offset is not None:
-            kaslr = int(self.kaslr_offset)
+        kaslr = self.get_kaslr_offset()
 
         for line in symbols:
             s = line.split(' ')
-- 
GitLab