Kernel/LibC: Implement mprotect

There may be some race conditions with this but i think this is good
enough to start with
This commit is contained in:
2025-08-05 02:39:19 +03:00
parent eb7922ab88
commit f1369c8fd6
18 changed files with 167 additions and 61 deletions

View File

@@ -212,7 +212,7 @@ namespace Kernel::ELF
file_backed_size,
{ .start = pheader_base, .end = pheader_base + file_backed_size },
MemoryRegion::Type::PRIVATE,
flags
flags, O_EXEC | O_RDWR
));
TRY(memory_regions.emplace_back(BAN::move(region)));
}
@@ -226,7 +226,7 @@ namespace Kernel::ELF
(pheader_base + program_header.p_memsz) - (aligned_vaddr + file_backed_size),
{ .start = aligned_vaddr + file_backed_size, .end = pheader_base + program_header.p_memsz },
MemoryRegion::Type::PRIVATE,
flags
flags, O_EXEC | O_RDWR
));
if (file_backed_size < program_header.p_filesz)
@@ -267,7 +267,8 @@ namespace Kernel::ELF
offset + region_size,
{ .start = last_loaded_address, .end = USERSPACE_END },
MemoryRegion::Type::PRIVATE,
PageTable::Flags::UserSupervisor | PageTable::Flags::Present
PageTable::Flags::UserSupervisor | PageTable::Flags::Present,
O_EXEC | O_RDWR
));
for (vaddr_t vaddr = region->vaddr(); vaddr < region->vaddr() + offset + region->size(); vaddr += PAGE_SIZE)