]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm/mremap: write-lock VMA while remapping it to a new address range
authorSuren Baghdasaryan <surenb@google.com>
Sat, 11 Jun 2022 04:42:02 +0000 (21:42 -0700)
committerLiam R. Howlett <Liam.Howlett@oracle.com>
Wed, 4 Jan 2023 20:59:25 +0000 (15:59 -0500)
Write-lock VMA as locked before copying it and when copy_vma produces
a new VMA.

Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Reviewed-by: Laurent Dufour <laurent.dufour@fr.ibm.com>
mm/mmap.c
mm/mremap.c

index ae585a6287eaf8cf798b4a9b427aaf3407c599a0..eeb8b098443af6e27ca2329ba21c0305928806c7 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -3267,6 +3267,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
                        get_file(new_vma->vm_file);
                if (new_vma->vm_ops && new_vma->vm_ops->open)
                        new_vma->vm_ops->open(new_vma);
+               vma_write_lock(new_vma);
                if (vma_link(mm, new_vma))
                        goto out_vma_link;
                *need_rmap_locks = false;
index e7093def4760e2f67545b657352abc697fafd448..2c3e2a0540d43cce0171ce302a1606f9c762d207 100644 (file)
@@ -622,6 +622,7 @@ static unsigned long move_vma(struct vm_area_struct *vma,
                        return -ENOMEM;
        }
 
+       vma_write_lock(vma);
        new_pgoff = vma->vm_pgoff + ((old_addr - vma->vm_start) >> PAGE_SHIFT);
        new_vma = copy_vma(&vma, new_addr, new_len, new_pgoff,
                           &need_rmap_locks);