diff --git a/Kernel/Memory/PageDirectory.cpp b/Kernel/Memory/PageDirectory.cpp index c54b95d3c70..1398343b230 100644 --- a/Kernel/Memory/PageDirectory.cpp +++ b/Kernel/Memory/PageDirectory.cpp @@ -150,8 +150,10 @@ UNMAP_AFTER_INIT void PageDirectory::allocate_kernel_directory() PageDirectory::~PageDirectory() { - SpinlockLocker lock(s_mm_lock); - cr3_map().remove(cr3()); + if (is_cr3_initialized()) { + SpinlockLocker lock(s_mm_lock); + cr3_map().remove(cr3()); + } } } diff --git a/Kernel/Memory/PageDirectory.h b/Kernel/Memory/PageDirectory.h index 9a7e564ca79..eaabce7dcc1 100644 --- a/Kernel/Memory/PageDirectory.h +++ b/Kernel/Memory/PageDirectory.h @@ -37,6 +37,15 @@ public: #endif } + bool is_cr3_initialized() const + { +#if ARCH(X86_64) + return m_pml4t; +#else + return m_directory_table; +#endif + } + VirtualRangeAllocator& range_allocator() { return m_range_allocator; } VirtualRangeAllocator const& range_allocator() const { return m_range_allocator; }