diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2022-02-17 00:04:49 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2022-02-17 00:05:05 +0100 |
commit | 58369a4518ff31c079552e46807747d5d08463fe (patch) | |
tree | 561ae0dd8db9d56000f54e869b3b058bb1e1e009 /i386 | |
parent | de55cd489886af509c687dbf9a4a9eab4be67e3f (diff) | |
download | gnumach-58369a4518ff31c079552e46807747d5d08463fe.tar.gz gnumach-58369a4518ff31c079552e46807747d5d08463fe.tar.bz2 gnumach-58369a4518ff31c079552e46807747d5d08463fe.zip |
pmap: Make sure we do not allocate page tables beyond 4GiB
vm_page_insert would not be able to store the offset.
Diffstat (limited to 'i386')
-rw-r--r-- | i386/intel/pmap.c | 5 |
1 files changed, 4 insertions, 1 deletions
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"); |