aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--i386/intel/pmap.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/i386/intel/pmap.c b/i386/intel/pmap.c
index 8aa27867..a9879340 100644
--- a/i386/intel/pmap.c
+++ b/i386/intel/pmap.c
@@ -1462,21 +1462,24 @@ void pmap_destroy(pmap_t p)
*/
#if PAE
#ifdef __x86_64__
- for (int l4i = 0; l4i < lin2l4num(VM_MAX_USER_ADDRESS); l4i++) {
+ for (int l4i = 0; l4i < NPTES; l4i++) {
pt_entry_t pdp = (pt_entry_t) p->l4base[l4i];
if (!(pdp & INTEL_PTE_VALID))
continue;
pt_entry_t *pdpbase = (pt_entry_t*) ptetokv(pdp);
- for (int l3i = 0; l3i < NPTES; l3i++)
#else /* __x86_64__ */
pt_entry_t *pdpbase = p->pdpbase;
- for (int l3i = 0; l3i < lin2pdpnum(VM_MAX_USER_ADDRESS); l3i++)
#endif /* __x86_64__ */
- {
+ for (int l3i = 0; l3i < NPTES; l3i++) {
pt_entry_t pde = (pt_entry_t) pdpbase[l3i];
if (!(pde & INTEL_PTE_VALID))
continue;
pt_entry_t *pdebase = (pt_entry_t*) ptetokv(pde);
+ if (
+#ifdef __x86_64__
+ l4i <= lin2l4num(VM_MAX_USER_ADDRESS) &&
+#endif /* __x86_64__ */
+ l3i <= lin2pdpnum(VM_MAX_USER_ADDRESS))
for (int l2i = 0; l2i < NPTES; l2i++)
#else /* PAE */
pt_entry_t *pdebase = p->dirbase;