diff --git a/Kernel/Memory/Region.cpp b/Kernel/Memory/Region.cpp index 1e89f8dd84..8bb78447af 100644 --- a/Kernel/Memory/Region.cpp +++ b/Kernel/Memory/Region.cpp @@ -293,6 +293,19 @@ void Region::remap() TODO(); } +void Region::clear_to_zero() +{ + VERIFY(vmobject().is_anonymous()); + SpinlockLocker locker(vmobject().m_lock); + for (auto i = 0u; i < page_count(); ++i) { + auto page = physical_page_slot(i); + VERIFY(page); + if (page->is_shared_zero_page()) + continue; + page = MM.shared_zero_page(); + } +} + PageFaultResponse Region::handle_fault(PageFault const& fault) { auto page_index_in_region = page_index_from_address(fault.vaddr()); diff --git a/Kernel/Memory/Region.h b/Kernel/Memory/Region.h index 2f1f8af8e0..8a86317b40 100644 --- a/Kernel/Memory/Region.h +++ b/Kernel/Memory/Region.h @@ -182,6 +182,8 @@ public: void remap(); + void clear_to_zero(); + [[nodiscard]] bool is_syscall_region() const { return m_syscall_region; } void set_syscall_region(bool b) { m_syscall_region = b; }