From 58369a4518ff31c079552e46807747d5d08463fe Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Thu, 17 Feb 2022 00:04:49 +0100 Subject: pmap: Make sure we do not allocate page tables beyond 4GiB vm_page_insert would not be able to store the offset. --- i386/intel/pmap.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/i386/intel/pmap.c b/i386/intel/pmap.c index 1a765352..d57040cf 100644 --- a/i386/intel/pmap.c +++ b/i386/intel/pmap.c @@ -1112,7 +1112,7 @@ vm_offset_t pmap_page_table_page_alloc(void) { vm_page_t m; - vm_offset_t pa; + phys_addr_t pa; check_simple_locks(); @@ -1135,6 +1135,7 @@ pmap_page_table_page_alloc(void) * can be found later. */ pa = m->phys_addr; + assert(pa == (vm_offset_t) pa); vm_object_lock(pmap_object); vm_page_insert(m, pmap_object, pa); vm_page_lock_queues(); @@ -1413,6 +1414,7 @@ void pmap_destroy(pmap_t p) pdep += ptes_per_vm_page) { if (*pdep & INTEL_PTE_VALID) { pa = pte_to_pa(*pdep); + assert(pa == (vm_offset_t) pa); vm_object_lock(pmap_object); m = vm_page_lookup(pmap_object, pa); if (m == VM_PAGE_NULL) @@ -2466,6 +2468,7 @@ void pmap_collect(pmap_t p) vm_page_t m; vm_object_lock(pmap_object); + assert(pa == (vm_offset_t) pa); m = vm_page_lookup(pmap_object, pa); if (m == VM_PAGE_NULL) panic("pmap_collect: pte page not in object"); -- cgit v1.2.3