From 75fe51a9ca4d79d46532a38f62fc04d6e1cd673b Mon Sep 17 00:00:00 2001 From: Idan Horowitz Date: Thu, 10 Feb 2022 19:59:26 +0200 Subject: [PATCH] Kernel: Stop trying to write unmapped Process regions into CoreDumps If we crashed in the middle of mapping in Regions, some of the regions may not have a page directory yet, and will result in a crash when Region::remap() is called. --- Kernel/Coredump.cpp | 4 ++++ Kernel/Memory/Region.h | 2 ++ 2 files changed, 6 insertions(+) diff --git a/Kernel/Coredump.cpp b/Kernel/Coredump.cpp index ee6a266a3f..fe4629d53a 100644 --- a/Kernel/Coredump.cpp +++ b/Kernel/Coredump.cpp @@ -186,6 +186,10 @@ ErrorOr Coredump::write_regions() if (region->access() == Memory::Region::Access::None) continue; + // If we crashed in the middle of mapping in Regions, they do not have a page directory yet, and will crash on a remap() call + if (!region->is_mapped()) + continue; + region->set_readable(true); region->remap(); diff --git a/Kernel/Memory/Region.h b/Kernel/Memory/Region.h index 54380fe7ed..dcaeae18a0 100644 --- a/Kernel/Memory/Region.h +++ b/Kernel/Memory/Region.h @@ -188,6 +188,8 @@ public: void remap(); + [[nodiscard]] bool is_mapped() const { return m_page_directory != nullptr; } + void clear_to_zero(); [[nodiscard]] bool is_syscall_region() const { return m_syscall_region; }