handle `kbase == None`

pull/3393/head
jxuanli 1 month ago
parent 17979d4c1a
commit 3d7bd9b784

@ -44,6 +44,9 @@ class Kallsyms:
def __init__(self): def __init__(self):
self.kallsyms: List[Tuple[str, str, int]] = [] self.kallsyms: List[Tuple[str, str, int]] = []
self.kbase = pwndbg.aglib.kernel.kbase() self.kbase = pwndbg.aglib.kernel.kbase()
if self.kbase is None:
print(M.warn("could not find kbase, kernel has not finished initialization?"))
return
mapping = pwndbg.aglib.kernel.first_kernel_ro_page() mapping = pwndbg.aglib.kernel.first_kernel_ro_page()
assert mapping is not None, "kernel memory mappings are missing" assert mapping is not None, "kernel memory mappings are missing"

@ -91,6 +91,8 @@ class ArchPagingInfo:
raise NotImplementedError() raise NotImplementedError()
def kbase_helper(self, address): def kbase_helper(self, address):
if address is None:
return None
for mapping in kernel_vmmap_pages(): for mapping in kernel_vmmap_pages():
# should be page aligned -- either from pt-dump or info mem # should be page aligned -- either from pt-dump or info mem
@ -220,7 +222,10 @@ class x86_64PagingInfo(ArchPagingInfo):
@property @property
@pwndbg.lib.cache.cache_until("stop") @pwndbg.lib.cache.cache_until("stop")
def kbase(self): def kbase(self):
return self.kbase_helper(pwndbg.aglib.kernel.get_idt_entries()[0].offset) idt_entries = pwndbg.aglib.kernel.get_idt_entries()
if len(idt_entries) == 0:
return None
return self.kbase_helper(idt_entries[0].offset)
@property @property
def page_shift(self) -> int: def page_shift(self) -> int:
@ -290,10 +295,10 @@ class x86_64PagingInfo(ArchPagingInfo):
def handle_kernel_pages(self, pages): def handle_kernel_pages(self, pages):
kernel_idx = None kernel_idx = None
kbase = self.kbase
for i, page in enumerate(pages): for i, page in enumerate(pages):
if kernel_idx is None and self.kbase in page: if kernel_idx is None and kbase is not None and kbase in page:
kernel_idx = i kernel_idx = i
kbase = self.kbase
if kernel_idx is None: if kernel_idx is None:
return return
has_loadable_driver = False has_loadable_driver = False
@ -384,6 +389,8 @@ class Aarch64PagingInfo(ArchPagingInfo):
@property @property
@pwndbg.lib.cache.cache_until("stop") @pwndbg.lib.cache.cache_until("stop")
def module_start(self): def module_start(self):
if self.kbase is None:
return None
res = None res = None
for page in kernel_vmmap_pages()[::-1]: for page in kernel_vmmap_pages()[::-1]:
if page.start >= self.kbase: if page.start >= self.kbase:
@ -565,6 +572,8 @@ class Aarch64PagingInfo(ArchPagingInfo):
return " ".join(name.strip().split()[:-1]) return " ".join(name.strip().split()[:-1])
def handle_kernel_pages(self, pages): def handle_kernel_pages(self, pages):
if self.kbase is None:
return
for i in range(len(pages)): for i in range(len(pages)):
page = pages[i] page = pages[i]
if page.start > self.kbase + self.ksize: if page.start > self.kbase + self.ksize:

Loading…
Cancel
Save