* [PATCH v2] mm/ksm: Fix race with VMA iteration and mm_struct teardown
@ 2023-03-08 22:03 Liam R. Howlett
0 siblings, 0 replies; only message in thread
From: Liam R. Howlett @ 2023-03-08 22:03 UTC (permalink / raw)
To: maple-tree, linux-mm, linux-kernel, Andrew Morton
Cc: Liam R. Howlett, Pengfei Xu, syzbot+2ee18845e89ae76342c5,
Matthew Wilcox, heng.su, lkp, Stable, David Hildenbrand
exit_mmap() will tear down the VMAs and maple tree with the mmap_lock
held in write mode. Ensure that the maple tree is still valid by
checking ksm_test_exit() after taking the mmap_lock in read mode, but
before the for_each_vma() iterator dereferences a destroyed maple tree.
Since the maple tree is destroyed, the flags telling lockdep to check an
external lock has been cleared. Skip the for_each_vma() iterator to
avoid dereferencing a maple tree without the external lock flag, which
would create a lockdep warning.
Reported-by: Pengfei Xu <pengfei.xu@intel.com>
Link: https://lore.kernel.org/lkml/ZAdUUhSbaa6fHS36@xpf.sh.intel.com/
Reported-by: syzbot+2ee18845e89ae76342c5@syzkaller.appspotmail.com
Link: https://syzkaller.appspot.com/bug?id=64a3e95957cd3deab99df7cd7b5a9475af92c93e
Cc: linux-mm@kvack.org
Cc: linux-kernel@vger.kernel.org
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: heng.su@intel.com
Cc: lkp@intel.com
Cc: <Stable@vger.kernel.org>
Fixes: a5f18ba07276 ("mm/ksm: use vma iterators instead of vma linked list")
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
Acked-by: David Hildenbrand <david@redhat.com>
---
Andrew,
I've included this note because I've changed the subject between v1 and
v2. This is for mm-hotfixes-unstable.
Replaces: b6d4338e8dd2 ("mm/ksm: fix race with ksm_exit() in VMA
iteration")
v1: https://lore.kernel.org/linux-mm/20230307205951.2465275-1-Liam.Howlett@oracle.com/
Changes since v1:
- Commit log & subject.
- Added Acked-by
mm/ksm.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/mm/ksm.c b/mm/ksm.c
index 525c3306e78b..d6280b258ece 100644
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -1044,9 +1044,15 @@ static int unmerge_and_remove_all_rmap_items(void)
mm = mm_slot->slot.mm;
mmap_read_lock(mm);
+
+ /*
+ * Exit right away if mm is exiting to avoid lockdep issue in
+ * the maple tree
+ */
+ if (ksm_test_exit(mm))
+ goto mm_exiting;
+
for_each_vma(vmi, vma) {
- if (ksm_test_exit(mm))
- break;
if (!(vma->vm_flags & VM_MERGEABLE) || !vma->anon_vma)
continue;
err = unmerge_ksm_pages(vma,
@@ -1055,6 +1061,7 @@ static int unmerge_and_remove_all_rmap_items(void)
goto error;
}
+mm_exiting:
remove_trailing_rmap_items(&mm_slot->rmap_list);
mmap_read_unlock(mm);
--
2.39.2
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2023-03-08 22:04 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-08 22:03 [PATCH v2] mm/ksm: Fix race with VMA iteration and mm_struct teardown Liam R. Howlett
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).