This is a note to let you know that I've just added the patch titled mm: lock newly mapped VMA which can be modified after it becomes visible to the 6.4-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: mm-lock-newly-mapped-vma-which-can-be-modified-after-it-becomes-visible.patch and it can be found in the queue-6.4 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From 33313a747e81af9f31d0d45de78c9397fa3655eb Mon Sep 17 00:00:00 2001 From: Suren Baghdasaryan <surenb@xxxxxxxxxx> Date: Sat, 8 Jul 2023 12:12:11 -0700 Subject: mm: lock newly mapped VMA which can be modified after it becomes visible From: Suren Baghdasaryan <surenb@xxxxxxxxxx> commit 33313a747e81af9f31d0d45de78c9397fa3655eb upstream. mmap_region adds a newly created VMA into VMA tree and might modify it afterwards before dropping the mmap_lock. This poses a problem for page faults handled under per-VMA locks because they don't take the mmap_lock and can stumble on this VMA while it's still being modified. Currently this does not pose a problem since post-addition modifications are done only for file-backed VMAs, which are not handled under per-VMA lock. However, once support for handling file-backed page faults with per-VMA locks is added, this will become a race. Fix this by write-locking the VMA before inserting it into the VMA tree. Other places where a new VMA is added into VMA tree do not modify it after the insertion, so do not need the same locking. Cc: stable@xxxxxxxxxxxxxxx Signed-off-by: Suren Baghdasaryan <surenb@xxxxxxxxxx> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- mm/mmap.c | 2 ++ 1 file changed, 2 insertions(+) --- a/mm/mmap.c +++ b/mm/mmap.c @@ -2804,6 +2804,8 @@ cannot_expand: if (vma->vm_file) i_mmap_lock_write(vma->vm_file->f_mapping); + /* Lock the VMA since it is modified after insertion into VMA tree */ + vma_start_write(vma); vma_iter_store(&vmi, vma); mm->map_count++; if (vma->vm_file) { Patches currently in stable-queue which might be from surenb@xxxxxxxxxx are queue-6.4/fork-lock-vmas-of-the-parent-process-when-forking-again.patch queue-6.4/mm-lock-a-vma-before-stack-expansion.patch queue-6.4/mm-lock-newly-mapped-vma-with-corrected-ordering.patch queue-6.4/mm-lock-newly-mapped-vma-which-can-be-modified-after-it-becomes-visible.patch queue-6.4/fork-lock-vmas-of-the-parent-process-when-forking.patch queue-6.4/mm-disable-config_per_vma_lock-until-its-fixed.patch