Re: [PATCH] mm/vma: read anon_vma carefully in validate_mm()
From: Andrew Morton
Date: Mon Nov 02 2026 - 18:17:05 EST
On Mon, 2 Nov 2026 11:02:56 +0000 "Lorenzo Stoakes (ARM)" <ljs@xxxxxxxxxx> wrote:
> > This ifdeffery seems unnecessary. What about this:
>
> Yup, even better.
>
> Andrew - could you update it in-place or do you need a v2?
I queued this update:
--- a/include/linux/mm.h~mm-vma-read-anon_vma-carefully-in-validate_mm-fix
+++ a/include/linux/mm.h
@@ -4370,9 +4370,7 @@ anon_rmap_tree_iter_first(struct anon_vm
struct anon_vma_chain *
anon_rmap_tree_iter_next(struct anon_vma_chain *avc,
pgoff_t pgoff_start, pgoff_t pgoff_last);
-#ifdef CONFIG_DEBUG_VM_RB
void anon_rmap_tree_verify(struct anon_vma_chain *avc);
-#endif
#define anon_rmap_tree_foreach(avc, anon_vma, pgoff_start, pgoff_last) \
for (avc = anon_rmap_tree_iter_first(anon_vma, pgoff_start, pgoff_last); \
--- a/mm/vma.c~mm-vma-read-anon_vma-carefully-in-validate_mm-fix
+++ a/mm/vma.c
@@ -669,14 +669,17 @@ static int dup_anon_vma(struct vm_area_s
}
#ifdef CONFIG_DEBUG_VM_MAPLE_TREE
-#ifdef CONFIG_DEBUG_VM_RB
static void validate_mm_anon_rmap(struct vm_area_struct *vma)
{
- struct anon_vma *anon_vma = READ_ONCE(vma->anon_vma);
+ struct anon_vma *anon_vma;
struct anon_vma_chain *avc;
+ if (!IS_ENABLED(CONFIG_DEBUG_VM_RB))
+ return;
+
vma_assert_stabilised(vma);
+ anon_vma = READ_ONCE(vma->anon_vma);
if (!anon_vma)
return;
@@ -685,11 +688,6 @@ static void validate_mm_anon_rmap(struct
anon_rmap_tree_verify(avc);
anon_vma_unlock_read(anon_vma);
}
-#else
-static void validate_mm_anon_rmap(struct vm_area_struct *vma)
-{
-}
-#endif
void validate_mm(struct mm_struct *mm)
{
_