소스 검색

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);