From b5d873dfae1f9eeef6f7f424a257abb880e93915 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Mon, 30 Oct 2023 12:14:12 +0200 Subject: [PATCH] Kernel/LibELF: Map pages always as RW so kernel can write to them Kernel doesn't seem to require W permissions to a page without UEFI so this had not been found earlier. --- LibELF/LibELF/LoadableELF.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/LibELF/LibELF/LoadableELF.cpp b/LibELF/LibELF/LoadableELF.cpp index c5475beffc..0897b282ce 100644 --- a/LibELF/LibELF/LoadableELF.cpp +++ b/LibELF/LibELF/LoadableELF.cpp @@ -226,7 +226,8 @@ namespace LibELF if (paddr == 0) return BAN::Error::from_errno(ENOMEM); - m_page_table.map_page_at(paddr, vaddr, flags); + // Temporarily map page as RW so kernel can write to it + m_page_table.map_page_at(paddr, vaddr, PageTable::Flags::ReadWrite | PageTable::Flags::Present); m_physical_page_count++; memset((void*)vaddr, 0x00, PAGE_SIZE); @@ -245,6 +246,9 @@ namespace LibELF TRY(m_inode->read(program_header.p_offset + file_offset, { (uint8_t*)vaddr + vaddr_offset, bytes })); } + // Map page with the correct flags + m_page_table.map_page_at(paddr, vaddr, flags); + return {}; } default: