aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src
diff options
context:
space:
mode:
authorMatteo Gmür <matteo.gmuer1@ost.ch>2024-12-01 09:46:37 +0000
committerMatteo Gmür <matteo.gmuer1@ost.ch>2024-12-01 09:46:37 +0000
commitc1e7edabc1dfbe387546297720fc495837d38d33 (patch)
treee8f21a61721eda982e195d2ca663838a2800d854 /arch/x86_64/src
parente8bbb1ad850a362dfa25ba1ea7bdd838a379def8 (diff)
downloadteachos-c1e7edabc1dfbe387546297720fc495837d38d33.tar.xz
teachos-c1e7edabc1dfbe387546297720fc495837d38d33.zip
Fix guard page and ensure it crashes even if guard page is skipped altogether
Diffstat (limited to 'arch/x86_64/src')
-rw-r--r--arch/x86_64/src/boot/boot.s16
-rw-r--r--arch/x86_64/src/kernel/main.cpp35
2 files changed, 34 insertions, 17 deletions
diff --git a/arch/x86_64/src/boot/boot.s b/arch/x86_64/src/boot/boot.s
index c1b3203..8d27ea1 100644
--- a/arch/x86_64/src/boot/boot.s
+++ b/arch/x86_64/src/boot/boot.s
@@ -7,6 +7,16 @@
* Uninitialized data for the bootstrapping process.
*/
.section .boot_bss, "aw", @nobits
+
+/**
+ * Reserve some space for the Multiboot 2 information pointer.
+ */
+.global multiboot_information_pointer
+multiboot_information_pointer: .skip 4
+
+/**
+ * Align page maps to 4 KiB or the assembler code, will cause crashes when attempting to enable paging.
+ */
.align 4096
/**
@@ -31,12 +41,6 @@ page_map_level_3: .skip 512 * 8
page_map_level_2: .skip 512 * 8
/**
- * Reserve some space for the Multiboot 2 information pointer.
- */
-.global multiboot_information_pointer
-multiboot_information_pointer: .skip 4
-
-/**
* Stack space for the bootstrapping process.
*
* Note: We are going to reserve 1 MiB for now. If/when the kernel requires
diff --git a/arch/x86_64/src/kernel/main.cpp b/arch/x86_64/src/kernel/main.cpp
index dd0a1d8..7463fc4 100644
--- a/arch/x86_64/src/kernel/main.cpp
+++ b/arch/x86_64/src/kernel/main.cpp
@@ -8,14 +8,19 @@
namespace teachos::arch::kernel
{
- auto main() -> void
+ auto stack_overflow_test(int count) -> int
{
- video::vga::text::clear();
- video::vga::text::cursor(false);
- video::vga::text::write("TeachOS is starting up...", video::vga::text::common_attributes::green_on_black);
-
- memory::initialize_memory_management();
+ int test[5000] = {};
+ if (test[0] == 0xFFFF)
+ {
+ return count;
+ }
+ count = stack_overflow_test(count);
+ return count++;
+ }
+ auto heap_test() -> void
+ {
memory::heap::bump_allocator heap_allocator{memory::heap::HEAP_START,
memory::heap::HEAP_START + memory::heap::HEAP_SIZE};
auto test = heap_allocator.allocate(1024);
@@ -28,14 +33,22 @@ namespace teachos::arch::kernel
test5.kernel_end = 3000;
auto test6 = test4.kernel_end;
auto test7 = test5.kernel_end;
- if (test6 && test7)
+ auto test8 = memory::multiboot::read_multiboot2();
+ if (test6 && test7 && test8.kernel_end)
{
video::vga::text::write("Kernel remapping successfull", video::vga::text::common_attributes::green_on_black);
}
+ }
+
+ auto main() -> void
+ {
+ video::vga::text::clear();
+ video::vga::text::cursor(false);
+ video::vga::text::write("TeachOS is starting up...", video::vga::text::common_attributes::green_on_black);
+
+ memory::initialize_memory_management();
- // TODO: Why is identity mapping multiboot2 information structure with new kernel not required and
- // allocator.allocate_frame still works?
- // TODO: Fix unmapping old level 4 page table and turn it into guard page, use Stack Probes for stack allocation if
- // possible.
+ // stack_overflow_test(0);
+ // heap_test();
}
} // namespace teachos::arch::kernel