diff options
author | Andreas Kling <kling@serenityos.org> | 2021-01-02 16:49:19 +0100 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-01-02 16:57:31 +0100 |
commit | fe6b3f99d1f544715098182ce5bed71d67f266cf (patch) | |
tree | 25577fbc5e9f4177ad2fc2b080192ecaf62bb257 /Kernel/Syscalls/mmap.cpp | |
parent | 5dae85afe7eadfa0ef8c33252ef2cdd7e35faafd (diff) | |
download | serenity-fe6b3f99d1f544715098182ce5bed71d67f266cf.zip |
Kernel: Allocate shared memory regions immediately
Lazily committed shared memory was not working in situations where one
process would write to the memory and another would only read from it.
Since the reading process would never cause a write fault in the shared
region, we'd never notice that the writing process had added real
physical pages to the VMObject. This happened because the lazily
committed pages were marked "present" in the page table.
This patch solves the issue by always allocating shared memory up front
and not trying to be clever about it.
Diffstat (limited to 'Kernel/Syscalls/mmap.cpp')
-rw-r--r-- | Kernel/Syscalls/mmap.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/Kernel/Syscalls/mmap.cpp b/Kernel/Syscalls/mmap.cpp index b1ccb31b8e..56e585b934 100644 --- a/Kernel/Syscalls/mmap.cpp +++ b/Kernel/Syscalls/mmap.cpp @@ -141,7 +141,7 @@ void* Process::sys$mmap(Userspace<const Syscall::SC_mmap_params*> user_params) } if (map_anonymous) { - auto strategy = map_noreserve ? AllocationStrategy::None : AllocationStrategy::Reserve; + auto strategy = map_shared ? AllocationStrategy::AllocateNow : (map_noreserve ? AllocationStrategy::None : AllocationStrategy::Reserve); region = allocate_region(range.value(), !name.is_null() ? name : "mmap", prot, strategy); if (!region && (!map_fixed && addr != 0)) region = allocate_region(allocate_range({}, size), !name.is_null() ? name : "mmap", prot, strategy); |