From 348f98e6791eae536881b65535a5029e45481334 Mon Sep 17 00:00:00 2001 From: Runmin Wang <runminw@codeaurora.org> Date: Wed, 14 Dec 2016 14:50:05 -0800 Subject: [PATCH] lrdp-v2: Add support to extract kaslr-offset from imem Kaslr-offset in stored in imem by the kernel driver. This patch enables the parser to extract the required offset before parsing. Change-Id: Ie773a2e52989b0f2a83c19d39ffdba7f77911e39 --- linux-ramdump-parser-v2/boards.py | 1 + linux-ramdump-parser-v2/ramdump.py | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/linux-ramdump-parser-v2/boards.py b/linux-ramdump-parser-v2/boards.py index 250227c..3ed3016 100755 --- a/linux-ramdump-parser-v2/boards.py +++ b/linux-ramdump-parser-v2/boards.py @@ -411,6 +411,7 @@ class BoardCobalt(Board): self.smem_addr = 0x6000000 self.phys_offset = 0x80000000 self.imem_start = 0x14680000 + self.kaslr_addr = 0x146bf6d0 self.wdog_addr = 0x146BF658 self.imem_file_name = 'OCIMEM.BIN' diff --git a/linux-ramdump-parser-v2/ramdump.py b/linux-ramdump-parser-v2/ramdump.py index 9d66627..344cb37 100755 --- a/linux-ramdump-parser-v2/ramdump.py +++ b/linux-ramdump-parser-v2/ramdump.py @@ -547,6 +547,12 @@ class RamDump(): self.ebi_start = self.ebi_files[0][1] if self.phys_offset is None: 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 + if options.phys_offset is not None: print_out_str( '[!!!] Phys offset was set to {0:x}'.format(\ @@ -968,6 +974,18 @@ class RamDump(): else: return self.read_word(self.tz_addr, False) + def get_kaslr_offset(self): + 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))) + def get_hw_id(self, add_offset=True): socinfo_format = -1 socinfo_id = -1 @@ -1054,6 +1072,7 @@ class RamDump(): self.hw_id = board.board_num self.cpu_type = board.cpu self.imem_fname = board.imem_file_name + self.kaslr_addr = board.kaslr_addr return True def resolve_virt(self, virt_or_name): -- GitLab