]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm/mmap: write-lock VMAs in vma_prepare before modifying them
authorSuren Baghdasaryan <surenb@google.com>
Mon, 27 Feb 2023 17:36:15 +0000 (09:36 -0800)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 28 Mar 2023 23:24:52 +0000 (16:24 -0700)
Write-lock all VMAs which might be affected by a merge, split, expand or
shrink operations.  All these operations use vma_prepare() before making
the modifications, therefore it provides a centralized place to perform
VMA locking.

Link: https://lkml.kernel.org/r/20230227173632.3292573-17-surenb@google.com
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/mmap.c

index d009d11e40ea5d1fe585550841b1fd03802e23e8..dcf3aed25227bf7b204090c9098ce71deda1d298 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -502,6 +502,16 @@ static inline void init_vma_prep(struct vma_prepare *vp,
  */
 static inline void vma_prepare(struct vma_prepare *vp)
 {
+       if (vp->vma)
+               vma_start_write(vp->vma);
+       if (vp->adj_next)
+               vma_start_write(vp->adj_next);
+       /* vp->insert is always a newly created VMA, no need for locking */
+       if (vp->remove)
+               vma_start_write(vp->remove);
+       if (vp->remove2)
+               vma_start_write(vp->remove2);
+
        if (vp->file) {
                uprobe_munmap(vp->vma, vp->vma->vm_start, vp->vma->vm_end);