ANDROID: mm: assert that mmap_lock is taken exclusively in vm_write_begin
vm_write_{begin|end} has to be called when mmap_lock is taken
exlusively. Add an assert statement in vm_write_begin to enforce
that. free_pgtables can free page tables without exclusive mmap_lock
if the vma was isolated, therefore avoid assertions in such cases.
Bug: 257443051
Change-Id: Ie81aefe025c743cda6f66717d2f08f4d78a55608
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
This commit is contained in:
@@ -1758,6 +1758,12 @@ int generic_access_phys(struct vm_area_struct *vma, unsigned long addr,
|
|||||||
#ifdef CONFIG_SPECULATIVE_PAGE_FAULT
|
#ifdef CONFIG_SPECULATIVE_PAGE_FAULT
|
||||||
static inline void vm_write_begin(struct vm_area_struct *vma)
|
static inline void vm_write_begin(struct vm_area_struct *vma)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Isolated vma might be freed without exclusive mmap_lock but
|
||||||
|
* speculative page fault handler still needs to know it was changed.
|
||||||
|
*/
|
||||||
|
if (!RB_EMPTY_NODE(&vma->vm_rb))
|
||||||
|
mmap_assert_write_locked(vma->vm_mm);
|
||||||
/*
|
/*
|
||||||
* The reads never spins and preemption
|
* The reads never spins and preemption
|
||||||
* disablement is not required.
|
* disablement is not required.
|
||||||
|
|||||||
Reference in New Issue
Block a user