From 640d27748f7cfc8744b474a03979e8be69549d19 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Mon, 30 Oct 2023 19:08:33 +0200 Subject: [PATCH] Kernel: Temporarily force FileBackedRegion mappings writable Now that write-protect bit is enabled this is neccessary. --- kernel/kernel/Memory/FileBackedRegion.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/kernel/kernel/Memory/FileBackedRegion.cpp b/kernel/kernel/Memory/FileBackedRegion.cpp index 39837d70..97742cf0 100644 --- a/kernel/kernel/Memory/FileBackedRegion.cpp +++ b/kernel/kernel/Memory/FileBackedRegion.cpp @@ -98,7 +98,9 @@ namespace Kernel paddr_t paddr = Heap::get().take_free_page(); if (paddr == 0) return BAN::Error::from_errno(ENOMEM); - m_page_table.map_page_at(paddr, vaddr, m_flags); + + // Temporarily force mapping to be writable so kernel can write to it + m_page_table.map_page_at(paddr, vaddr, m_flags | PageTable::Flags::ReadWrite); size_t file_offset = m_offset + (vaddr - m_vaddr); size_t bytes = BAN::Math::min(m_size - file_offset, PAGE_SIZE); @@ -120,6 +122,10 @@ namespace Kernel m_page_table.unmap_page(vaddr); return BAN::Error::from_errno(EIO); } + + // Disable writable if not wanted + if (!(m_flags & PageTable::Flags::ReadWrite)) + m_page_table.map_page_at(paddr, vaddr, m_flags); } else if (m_type == Type::SHARED) {