Skip to content

Commit 958abc0

Browse files
howlettgregkh
authored andcommitted
mm/damon/vaddr: protect vma traversal in __damon_va_thre_regions() with rcu read lock
commit fb497d6 upstream. Traversing VMAs of a given maple tree should be protected by rcu read lock. However, __damon_va_three_regions() is not doing the protection. Hold the lock. Link: https://lkml.kernel.org/r/20240905001204.1481-1-sj@kernel.org Fixes: d0cf3dd ("damon: convert __damon_va_three_regions to use the VMA iterator") Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com> Signed-off-by: SeongJae Park <sj@kernel.org> Reported-by: Guenter Roeck <linux@roeck-us.net> Closes: https://lore.kernel.org/b83651a0-5b24-4206-b860-cb54ffdf209b@roeck-us.net Tested-by: Guenter Roeck <linux@roeck-us.net> Cc: David Hildenbrand <david@redhat.com> Cc: Matthew Wilcox <willy@infradead.org> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 9c17a36 commit 958abc0

1 file changed

Lines changed: 2 additions & 0 deletions

File tree

mm/damon/vaddr.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ static int __damon_va_three_regions(struct mm_struct *mm,
126126
* If this is too slow, it can be optimised to examine the maple
127127
* tree gaps.
128128
*/
129+
rcu_read_lock();
129130
for_each_vma(vmi, vma) {
130131
unsigned long gap;
131132

@@ -146,6 +147,7 @@ static int __damon_va_three_regions(struct mm_struct *mm,
146147
next:
147148
prev = vma;
148149
}
150+
rcu_read_unlock();
149151

150152
if (!sz_range(&second_gap) || !sz_range(&first_gap))
151153
return -EINVAL;

0 commit comments

Comments
 (0)