From c39eda166f19414f4cbd9552c9a99315a52cb9dc Mon Sep 17 00:00:00 2001 From: Aaron Tomlin Date: Sat, 10 Dec 2022 20:29:25 +0000 Subject: [PATCH] drgn.helpers.linux.mm: Incorporate the use of pfn_mapped[] in for_each_page() Modify the for_each_page() helper to consider both pfn_mapped[] and nr_pfn_mapped respectively. Therefore only valid kernel mapped pages are returned. Signed-off-by: Aaron Tomlin --- drgn/helpers/linux/mm.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drgn/helpers/linux/mm.py b/drgn/helpers/linux/mm.py index 5896ff9aa..7c2b48bee 100644 --- a/drgn/helpers/linux/mm.py +++ b/drgn/helpers/linux/mm.py @@ -690,13 +690,17 @@ def decode_page_flags(page: Object) -> str: def for_each_page(prog: Program) -> Iterator[Object]: """ - Iterate over all pages in the system. + Iterate over all present/or mapped kernel pages. :return: Iterator of ``struct page *`` objects. """ vmemmap = prog["vmemmap"] - for i in range(prog["min_low_pfn"], prog["max_pfn"]): - yield vmemmap + i + pfn_mapped = prog["pfn_mapped"] + nr_pfn_mapped = prog["nr_pfn_mapped"] + for i in range(nr_pfn_mapped.value_()): + page = vmemmap + pfn_mapped[i].start.value_() + for j in range(pfn_mapped[i].start.value_(), pfn_mapped[i].end.value_() - pfn_mapped[i].start.value_()): + yield page + j @overload