* Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> [241031 16:48]: > On Thu, 31 Oct 2024 15:36:08 -0400 "Liam R. Howlett" <Liam.Howlett@xxxxxxxxxx> wrote: > > > From: "Liam R. Howlett" <Liam.Howlett@xxxxxxxxxx> > > > > There have been no reported infinite loops in the tree, but checking the > > detection of an infinite loop during validation is simple enough. Add > > the detection to the validate_mm() function so that error reports are > > clear and don't just report stalls. > > > > This does not protect against internal maple tree issues, but it does > > detect too many vmas being returned from the tree. > > > > The variance of +10 is to allow for the debugging output to be more useful for > > nearly correct counts. In the event of more than 10 over the map_count, the > > count will be set to -1 for easier identification of a potential infinite loop. > > > > Note that the mmap lock is held to ensure a consistent tree state during the > > validation process. > > > > ... > > > > +++ b/mm/vma.c > > @@ -615,7 +615,10 @@ void validate_mm(struct mm_struct *mm) > > anon_vma_unlock_read(anon_vma); > > } > > #endif > > - i++; > > + if (++i > mm->map_count + 10) { > > + i = -1; > > + break; > > + } > > } > > if (i != mm->map_count) { > > pr_emerg("map_count %d vma iterator %d\n", mm->map_count, i); > > It might be helpful to tell readers what's going on here? Sounds good. I guess I should have waited longer for a v2. > > --- a/mm/vma.c~vma-detect-infinite-loop-in-vma-tree-fix > +++ a/mm/vma.c > @@ -615,6 +615,7 @@ void validate_mm(struct mm_struct *mm) > anon_vma_unlock_read(anon_vma); > } > #endif > + /* Check for a infinite loop */ > if (++i > mm->map_count + 10) { > i = -1; > break; > _ >