Преглед изворни кода

Kernel: Disable interrupts throughout ~Region()

We don't want an interrupt handler to access the VM data structures
while their internal consistency is broken.
Andreas Kling пре 5 година
родитељ
комит
bf43d94a2f
1 измењених фајлова са 4 додато и 0 уклоњено
  1. 4 0
      Kernel/VM/Region.cpp

+ 4 - 0
Kernel/VM/Region.cpp

@@ -39,6 +39,10 @@ Region::Region(const Range& range, NonnullRefPtr<VMObject> vmo, size_t offset_in
 
 Region::~Region()
 {
+    // Make sure we disable interrupts so we don't get interrupted between unmapping and unregistering.
+    // Unmapping the region will give the VM back to the RangeAllocator, so an interrupt handler would
+    // find the address<->region mappings in an invalid state there.
+    InterruptDisabler disabler;
     if (m_page_directory) {
         MM.unmap_region(*this);
         ASSERT(!m_page_directory);