Fixes VMR creating off-by-one
If a VMR would just barely fit before the first VMR, we would fail to
use that slot.
Practically, this only happens if you decide to do a MAP_FIXED at a low
address, which will unmap a chunk of ld.so - not recommended!
diff --git a/kern/arch/x86/ros/mmu64.h b/kern/arch/x86/ros/mmu64.h
index be2058e..9e692be 100644
--- a/kern/arch/x86/ros/mmu64.h
+++ b/kern/arch/x86/ros/mmu64.h
@@ -118,6 +118,13 @@
* | Program Data & Heap |
* | |
* +------------------------------+ 0x0000000000400000
+ * . .
+ * . .
+ * |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
+ * | |
+ * | ld.so (Dynamic) |
+ * | |
+ * MMAP_LOWEST_VA +------------------------------+ 0x0000000000100000
* | |
* | Empty Memory (*) |
* | |
diff --git a/kern/src/mm.c b/kern/src/mm.c
index 2b10536..bf93513 100644
--- a/kern/src/mm.c
+++ b/kern/src/mm.c
@@ -58,7 +58,7 @@
vm_i = TAILQ_FIRST(&p->vm_regions);
/* This works for now, but if all we have is BRK_END ones, we'll start
* growing backwards (TODO) */
- if (!vm_i || (va + len < vm_i->vm_base)) {
+ if (!vm_i || (va + len <= vm_i->vm_base)) {
vmr = kmem_cache_alloc(vmr_kcache, 0);
if (!vmr)
panic("EOM!");