* [PATCH] mm/mempolicy: Fix mbind_range() arguments to vma_merge()
@ 2022-10-15 2:12 Liam Howlett
0 siblings, 0 replies; only message in thread
From: Liam Howlett @ 2022-10-15 2:12 UTC (permalink / raw)
To: maple-tree, linux-mm, linux-kernel, Andrew Morton
Cc: Liam Howlett, Yu Zhao, kernel test robot
Fuzzing produced an invalid argument to vma_merge() which was caught
by the newly added verification of the number of VMAs being removed on
process exit. Analyzing the failure eventually resulted in finding an
issue with the search of a VMA that started at address 0, which caused
an underflow and thus the loss of many VMAs being tracked in the tree.
Fix the underflow by changing the search of the maple tree to use the
start address directly.
Cc: Yu Zhao <yuzhao@google.com>
Reported-by: kernel test robot <oliver.sang@intel.com>
Link: https://lore.kernel.org/r/202210052318.5ad10912-oliver.sang@intel.com
Fixes: 66850be55e8e (mm/mempolicy: use vma iterator & maple state instead of vma linked list)
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
---
mm/mempolicy.c | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index a937eaec5b68..61aa9aedb728 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -787,17 +787,22 @@ static int vma_replace_policy(struct vm_area_struct *vma,
static int mbind_range(struct mm_struct *mm, unsigned long start,
unsigned long end, struct mempolicy *new_pol)
{
- MA_STATE(mas, &mm->mm_mt, start - 1, start - 1);
+ MA_STATE(mas, &mm->mm_mt, start, start);
struct vm_area_struct *prev;
struct vm_area_struct *vma;
int err = 0;
pgoff_t pgoff;
- prev = mas_find_rev(&mas, 0);
- if (prev && (start < prev->vm_end))
- vma = prev;
- else
- vma = mas_next(&mas, end - 1);
+ prev = mas_prev(&mas, 0);
+ if (unlikely(!prev))
+ mas_set(&mas, start);
+
+ vma = mas_find(&mas, end - 1);
+ if (WARN_ON(!vma))
+ return 0;
+
+ if (start > vma->vm_start)
+ prev = vma;
for (; vma; vma = mas_next(&mas, end - 1)) {
unsigned long vmstart = max(start, vma->vm_start);
--
2.35.1
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-10-15 2:12 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-15 2:12 [PATCH] mm/mempolicy: Fix mbind_range() arguments to vma_merge() Liam Howlett
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox