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