diff --git a/kernel/kernel/Memory/FileBackedRegion.cpp b/kernel/kernel/Memory/FileBackedRegion.cpp index 3e2518bf..37fd3e0b 100644 --- a/kernel/kernel/Memory/FileBackedRegion.cpp +++ b/kernel/kernel/Memory/FileBackedRegion.cpp @@ -99,13 +99,12 @@ namespace Kernel if (m_type != Type::SHARED) return {}; - const vaddr_t first_page = address & PAGE_ADDR_MASK; - const vaddr_t last_page = BAN::Math::div_round_up(address + size, PAGE_SIZE) * PAGE_SIZE; + const vaddr_t first_page = BAN::Math::max(m_vaddr, address) & PAGE_ADDR_MASK; + const vaddr_t last_page = BAN::Math::div_round_up(BAN::Math::min(m_vaddr + m_size, address + size), PAGE_SIZE) * PAGE_SIZE; RWLockRDGuard _(m_shared_data->rw_lock); for (vaddr_t page_addr = first_page; page_addr < last_page; page_addr += PAGE_SIZE) - if (contains(page_addr)) - m_shared_data->sync_no_lock((m_offset + page_addr - m_vaddr) / PAGE_SIZE); + m_shared_data->sync_no_lock((m_offset + page_addr - m_vaddr) / PAGE_SIZE); return {}; }