mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-01 15:43:36 +03:00
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.
This commit is contained in:
parent
6111cfda73
commit
3645b9e2a6
Notes:
sideshowbarker
2024-07-19 05:10:08 +09:00
Author: https://github.com/bugaevc Commit: https://github.com/SerenityOS/serenity/commit/3645b9e2a62 Pull-request: https://github.com/SerenityOS/serenity/pull/2675 Reviewed-by: https://github.com/awesomekling
@ -232,12 +232,14 @@ Region* Process::allocate_region_with_vmobject(VirtualAddress vaddr, size_t size
|
||||
|
||||
bool Process::deallocate_region(Region& region)
|
||||
{
|
||||
OwnPtr<Region> 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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user