aboutsummaryrefslogtreecommitdiff
path: root/i386
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2023-08-14 01:20:50 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2023-08-14 01:22:05 +0200
commitbf8632fdb76fef70c830082a8e5c059c1d0aeb7c (patch)
treef0e444f89b45bce755abbefd9eb0ab26e7105478 /i386
parent0858a1817f58a002945c4c58fea196f2b14ba460 (diff)
downloadgnumach-bf8632fdb76fef70c830082a8e5c059c1d0aeb7c.tar.gz
gnumach-bf8632fdb76fef70c830082a8e5c059c1d0aeb7c.tar.bz2
gnumach-bf8632fdb76fef70c830082a8e5c059c1d0aeb7c.zip
pmap: Fix coping with VM_MAX_USER_ADDRESS not being aligned on l4 limit
It is however usually aligned on l3 limit.
Diffstat (limited to 'i386')
-rw-r--r--i386/intel/pmap.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/i386/intel/pmap.c b/i386/intel/pmap.c
index a9879340..1a20f38b 100644
--- a/i386/intel/pmap.c
+++ b/i386/intel/pmap.c
@@ -1477,9 +1477,11 @@ void pmap_destroy(pmap_t p)
pt_entry_t *pdebase = (pt_entry_t*) ptetokv(pde);
if (
#ifdef __x86_64__
- l4i <= lin2l4num(VM_MAX_USER_ADDRESS) &&
+ l4i < lin2l4num(VM_MAX_USER_ADDRESS) ||
+ (l4i == lin2l4num(VM_MAX_USER_ADDRESS) && l3i <= lin2pdpnum(VM_MAX_USER_ADDRESS)))
+#else /* __x86_64__ */
+ l3i <= lin2pdpnum(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;