aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/x86_64/include/arch/memory/page_table.hpp2
-rw-r--r--arch/x86_64/kapi/memory.cpp4
-rw-r--r--kernel/kapi/memory.cpp2
-rw-r--r--kernel/src/memory/block_list_allocator.cpp3
4 files changed, 6 insertions, 5 deletions
diff --git a/arch/x86_64/include/arch/memory/page_table.hpp b/arch/x86_64/include/arch/memory/page_table.hpp
index 778c201..e00e0a4 100644
--- a/arch/x86_64/include/arch/memory/page_table.hpp
+++ b/arch/x86_64/include/arch/memory/page_table.hpp
@@ -334,7 +334,7 @@ namespace arch::memory
result |= table_flags::disable_cache;
}
- if ((flags & mapper_flags::supervisor_only) != mapper_flags::empty)
+ if ((flags & mapper_flags::supervisor_only) == mapper_flags::empty)
{
result |= table_flags::user_accessible;
}
diff --git a/arch/x86_64/kapi/memory.cpp b/arch/x86_64/kapi/memory.cpp
index 6bbfad3..11bc69c 100644
--- a/arch/x86_64/kapi/memory.cpp
+++ b/arch/x86_64/kapi/memory.cpp
@@ -138,7 +138,7 @@ namespace kapi::memory
auto page = page::containing(vga_virtual_start);
auto frame = frame::containing(vga_physical_start);
- mapper.map(page, frame, page_mapper::flags::writable);
+ mapper.map(page, frame, page_mapper::flags::writable | page_mapper::flags::supervisor_only);
}
auto remap_multiboot_information(page_mapper & mapper) -> void
@@ -153,7 +153,7 @@ namespace kapi::memory
{
auto page = page::containing(mbi_virtual_start) + i;
auto frame = frame::containing(mbi_physical_start) + i;
- mapper.map(page, frame, page_mapper::flags::empty);
+ mapper.map(page, frame, page_mapper::flags::supervisor_only);
}
}
diff --git a/kernel/kapi/memory.cpp b/kernel/kapi/memory.cpp
index b1fb616..d8065d4 100644
--- a/kernel/kapi/memory.cpp
+++ b/kernel/kapi/memory.cpp
@@ -121,7 +121,7 @@ namespace kapi::memory
system::panic("[OS:MEM] Not enough memory for bitmap allocator!");
}
- auto const flags = page_mapper::flags::writable | page_mapper::flags::supervisor_only;
+ auto const flags = page_mapper::flags::writable | page_mapper::flags::supervisor_only | page_mapper::flags::global;
std::ranges::for_each(std::views::iota(0uz, bitmap_pages), [&](auto index) {
auto page = page::containing(pmm_metadata_base + index * page::size);
diff --git a/kernel/src/memory/block_list_allocator.cpp b/kernel/src/memory/block_list_allocator.cpp
index 06b4581..be83236 100644
--- a/kernel/src/memory/block_list_allocator.cpp
+++ b/kernel/src/memory/block_list_allocator.cpp
@@ -93,7 +93,8 @@ namespace kernel::memory
auto const total_required_size = size + sizeof(block_header);
auto const frames_needed = (total_required_size + kapi::memory::frame::size - 1) / kapi::memory::frame::size;
- auto const flags = kapi::memory::page_mapper::flags::writable | kapi::memory::page_mapper::flags::supervisor_only;
+ auto const flags = kapi::memory::page_mapper::flags::writable | kapi::memory::page_mapper::flags::supervisor_only |
+ kapi::memory::page_mapper::flags::global;
for (auto i = 0uz; i < frames_needed; ++i)
{