diff --git a/src/kernel/process.c b/src/kernel/process.c index c149cdd..f840299 100644 --- a/src/kernel/process.c +++ b/src/kernel/process.c @@ -262,10 +262,14 @@ void destroy_process(struct process *process) { if (process->p3_virtual_base[p3i]) { for (int p2i = 0; p2i < 512; ++p2i) if (process->p2_virtual_bases[p3i][p2i]) { - for (int p1i = 0; p1i < 512; ++p1i) - mark_physical_memory_free( - process->p1_virtual_bases[p3i][p2i][p1i] & 0x7ffffffffffff000, - 4096); + for (int p1i = 0; p1i < 512; ++p1i) { + uint64_t pma = + process->p1_virtual_bases[p3i][p2i][p1i] & 0x7ffffffffffff000; + if (pma >= fb_physical_base && + pma < fb_physical_base + fb_pitch * fb_height) + continue; + mark_physical_memory_free(pma, 4096); + } unmap_and_free_kernel_page(process->p1_virtual_bases[p3i][p2i]); } unmap_and_free_kernel_page(process->p2_virtual_bases[p3i]);