From 3645b9e2a62bea3cbfe27d73e7a81d8285511aad Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Thu, 2 Jul 2020 11:53:19 +0300 Subject: [PATCH] Kernel: Make sure to drop region with interrupts enabled A region can drop an inode if it was mmaped from the inode and held the last reference to it, and that may require some locking. --- Kernel/Process.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index 6fa34e1170..a3ce931dbc 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -232,12 +232,14 @@ Region* Process::allocate_region_with_vmobject(VirtualAddress vaddr, size_t size bool Process::deallocate_region(Region& region) { + OwnPtr region_protector; ScopedSpinLock lock(m_lock); + if (m_region_lookup_cache.region == ®ion) m_region_lookup_cache.region = nullptr; for (size_t i = 0; i < m_regions.size(); ++i) { if (&m_regions[i] == ®ion) { - m_regions.unstable_take(i); + region_protector = m_regions.unstable_take(i); return true; } }