From d292e864388b2e001830f8afd034f330962f3398 Mon Sep 17 00:00:00 2001 From: Amelia Coutard Date: Mon, 27 Feb 2023 17:55:49 +0100 Subject: [PATCH] Fixed bug in page counting for elf file loading. Added support for writeable segments of elf files (RO is still RO) --- kernel/src/kernel.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/kernel/src/kernel.cpp b/kernel/src/kernel.cpp index a2cbd58..3933a16 100644 --- a/kernel/src/kernel.cpp +++ b/kernel/src/kernel.cpp @@ -194,30 +194,30 @@ extern "C" void kmain(unsigned long magic, os::phys_ptr(PDPT_alloc.ptr.get_phys_addr())); } os::paging::PDPT& PDPT = *get_base_address(PML4T.contents[indices.pml4e]); if (PDPT.contents[indices.pdpe].non_page.P == 0) { - PDPT.contents[indices.pdpe] = {.non_page = {.P = 1, .R_W = 0, .U_S = 1, .PWT = 0, .PCD = 0, .base_address = 0, .NX = 0}}; + PDPT.contents[indices.pdpe] = {.non_page = {.P = 1, .R_W = 1, .U_S = 1, .PWT = 0, .PCD = 0, .base_address = 0, .NX = 0}}; const auto PDT_alloc = os::paging::page_allocator.allocate(1); set_base_address(PDPT.contents[indices.pdpe], os::phys_ptr(PDT_alloc.ptr.get_phys_addr())); } os::paging::PDT& PDT = *get_base_address(PDPT.contents[indices.pdpe]); if (PDT.contents[indices.pde].non_page.P == 0) { - PDT.contents[indices.pde] = {.non_page = {.P = 1, .R_W = 0, .U_S = 1, .PWT = 0, .PCD = 0, .base_address = 0, .NX = 0}}; + PDT.contents[indices.pde] = {.non_page = {.P = 1, .R_W = 1, .U_S = 1, .PWT = 0, .PCD = 0, .base_address = 0, .NX = 0}}; const auto PT_alloc = os::paging::page_allocator.allocate(1); set_base_address(PDT.contents[indices.pde], os::phys_ptr(PT_alloc.ptr.get_phys_addr())); } os::paging::PT& PT = *get_base_address(PDT.contents[indices.pde]); if (PT.contents[indices.pe].P == 0) { - PT.contents[indices.pe] = {.P = 1, .R_W = 0, .U_S = 1, .PWT = 0, .PCD = 0, .PAT = 0, .G = 0, .base_address = 0, .NX = 0}; + PT.contents[indices.pe] = {.P = 1, .R_W = (program_header.flags & 2) >> 1, .U_S = 1, .PWT = 0, .PCD = 0, .PAT = 0, .G = 0, .base_address = 0, .NX = 0}; const auto page_alloc = os::paging::page_allocator.allocate(1); set_page_base_address(PT.contents[indices.pe], os::phys_ptr(page_alloc.ptr.get_phys_addr())); } -- 2.47.0