From 2a7f62e27573f80af3a388ed31024157c48bb42f Mon Sep 17 00:00:00 2001 From: Ruslan Isaev Date: Tue, 9 Dec 2025 23:34:15 +0300 Subject: [PATCH] mm: make get_physaddr return NULL if PD or PT is not present --- src/mm/page_tables.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/mm/page_tables.c b/src/mm/page_tables.c index bac66df..a48e697 100644 --- a/src/mm/page_tables.c +++ b/src/mm/page_tables.c @@ -22,10 +22,18 @@ void *get_physaddr(void *virtualaddr) { unsigned long ptindex = (unsigned long)virtualaddr >> 12 & 0x03FF; unsigned long *pd = (unsigned long *)0xFFFFF000; - // Here you need to check whether the PD entry is present. + if(!(pd[pdindex] & PAGE_PRESENT)) + { + debug_log("get_physaddr: no PD (virt address is %X)\n", virtualaddr); + return NULL; + } uint32_t *pt = (uint32_t*)(0xFFC00000 + (pdindex << 12)); - // Here you need to check whether the PT entry is present. + if(!(pt[ptindex] & PAGE_PRESENT)) + { + debug_log("get_physaddr: no PT (virt address is %X)\n", virtualaddr); + return NULL; + } return (void *)((pt[ptindex] & ~0xFFF) + ((unsigned long)virtualaddr & 0xFFF)); }