diff --git a/src/kernel/memory/vmm.c b/src/kernel/memory/vmm.c index 87b9058..e3c6ac5 100644 --- a/src/kernel/memory/vmm.c +++ b/src/kernel/memory/vmm.c @@ -83,6 +83,8 @@ void free_page(void *P4, uintptr_t addr, int free) return; P1e(P4, addr).value = 0; + if(!free) return; + union PTE *pt; pt = PT(P2e(P4, addr).value); diff --git a/src/kernel/memory/vmm.tt b/src/kernel/memory/vmm.tt index d8a9ffa..398e027 100644 --- a/src/kernel/memory/vmm.tt +++ b/src/kernel/memory/vmm.tt @@ -146,3 +146,12 @@ TEST(free_page_unsets_P2_entry_if_P1_is_empty) ASSERT_EQ_PTR(p2[3], 0); } +TEST(free_page_does_not_unset_P2_entry_if_not_asked_to) +{ + BUILD_PT(1,2,3); + p1[4] = PAGE_PRESENT; + + free_page(p4, ADDR1234, 0); + + ASSERT_NEQ_PTR(p2[3], 0); +}