diff options
author | Anton Kling <anton@kling.gg> | 2023-11-08 21:28:10 +0100 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2023-11-08 21:29:31 +0100 |
commit | 7f54cd8f4839ddf8d1875de69afc81948bd4a3e6 (patch) | |
tree | 6a640521e3666914284dc79ae1a4e3174366c3a9 /kernel/arch | |
parent | 2026a4f95f3a7dcc9613c8abe2d79d8284b8cd37 (diff) |
Kerenl/MMU: Remove dumb bug as a result of uninitalized memory
The kernel would randomly crash. Turns out I did not zero out the frames
so my page allocator seemed to get into some weird state.
Diffstat (limited to 'kernel/arch')
-rw-r--r-- | kernel/arch/i386/mmu.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/kernel/arch/i386/mmu.c b/kernel/arch/i386/mmu.c index ff35766..aeb4ba6 100644 --- a/kernel/arch/i386/mmu.c +++ b/kernel/arch/i386/mmu.c @@ -530,6 +530,7 @@ void paging_init(uint64_t memsize) { asm volatile("mov %%cr3, %0" : "=r"(cr3)); uint32_t *virtual = (uint32_t *)((uint32_t)cr3 + 0xC0000000); frames = ksbrk(1024 * sizeof(uint32_t)); + memset(frames, 0, 1024 * sizeof(uint32_t)); num_of_frames = 1024 * 32; kernel_directory = &real_kernel_directory; @@ -547,6 +548,7 @@ void paging_init(uint64_t memsize) { // Loop through the pages in the table PageTable *table = kernel_directory->tables[i]; + write_to_frame(kernel_directory->physical_tables[i], 1); for (size_t j = 0; j < 1024; j++) { if (!table->pages[j].present) continue; @@ -584,6 +586,7 @@ void paging_init(uint64_t memsize) { available_memory_kb = memsize; num_of_frames = available_memory_kb / 4; uint32_t *new_frames = ksbrk(buffer_size); + memset(new_frames, 0, buffer_size); memcpy(new_frames, frames, 1024 * sizeof(uint32_t)); frames = new_frames; } |