]> 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)
committerSuren Baghdasaryan <surenb@google.com>
Wed, 23 Nov 2022 02:09:45 +0000 (02:09 +0000)
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 121e17abf76207e6e95d9b1040ced70fcfa34781..006a9d09dafc5792125ef9d6c8a56db0363f8ab1 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -3266,6 +3266,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);