From 10aa58d7c3e8d6282d6ef0169ef7934dc9754042 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Wed, 20 Feb 2019 15:33:32 -0500 Subject: [PATCH] kernel/vm: Make sure the base address is larger than fBase. This is technically only a functional change following the previous commit, which unconditionally made sure the address was larger than the base except for B_EXACT_ADDRESS. Essentially this makes sure that if an address is passed which is smaller than the base is passed in, it won't immediately fail just by being too small. Checked against BeOS (0x0 passed to create_area with B_BASE_ADDRESS succeeds, and returns 0x2000 consistently.) This is also needed to not break userland initialization following the next commit. --- src/system/kernel/vm/VMUserAddressSpace.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/system/kernel/vm/VMUserAddressSpace.cpp b/src/system/kernel/vm/VMUserAddressSpace.cpp index 8bd58bcc7e..9e91b6cdd5 100644 --- a/src/system/kernel/vm/VMUserAddressSpace.cpp +++ b/src/system/kernel/vm/VMUserAddressSpace.cpp @@ -178,7 +178,7 @@ VMUserAddressSpace::InsertArea(VMArea* _area, size_t size, case B_BASE_ADDRESS: case B_RANDOMIZED_BASE_ADDRESS: - searchBase = (addr_t)addressRestrictions->address; + searchBase = std::max(fBase, (addr_t)addressRestrictions->address); searchEnd = fEndAddress; break; @@ -186,7 +186,7 @@ VMUserAddressSpace::InsertArea(VMArea* _area, size_t size, case B_ANY_KERNEL_ADDRESS: case B_ANY_KERNEL_BLOCK_ADDRESS: case B_RANDOMIZED_ANY_ADDRESS: - searchBase = std::max(fBase, USER_BASE_ANY); + searchBase = std::max(fBase, (addr_t)USER_BASE_ANY); searchEnd = fEndAddress; break;