diff --git a/linux-ramdump-parser-v2/parsers/ddrcompare.py b/linux-ramdump-parser-v2/parsers/ddrcompare.py index 5a4866ffbdd41deb2f398b27a4d12d3cba8aaaf3..6e404dcec034c875fe3b933d7c0f09f13b27bb6c 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 90ea0765a5902adc3b725f580302220c16a12b15..8c92690dec9ca4fe19ea09a36d32c8c28f573b97 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 48778af43af2598658d667c4c3668d1851f90d4f..a8a7910a0a9779faa58852320bc731557935890d 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(' ')