mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-24 19:40:21 +09:00
nommu: fix split_vma() map_count error
commitfd9edbdbdcupstream. During the maple tree conversion of nommu, an error in counting the VMAs was introduced by counting the existing VMA again. The counting used to be decremented by one and incremented by two, but now it only increments by two. Fix the counting error by moving the increment outside the setup_vma_to_mm() function to the callers. Link: https://lkml.kernel.org/r/20230109205809.956325-1-Liam.Howlett@oracle.com Fixes:8220543df1("nommu: remove uses of VMA linked list") Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Yu Zhao <yuzhao@google.com> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
6447569f4f
commit
e733121383
@@ -559,7 +559,6 @@ void vma_mas_remove(struct vm_area_struct *vma, struct ma_state *mas)
|
||||
|
||||
static void setup_vma_to_mm(struct vm_area_struct *vma, struct mm_struct *mm)
|
||||
{
|
||||
mm->map_count++;
|
||||
vma->vm_mm = mm;
|
||||
|
||||
/* add the VMA to the mapping */
|
||||
@@ -587,6 +586,7 @@ static void mas_add_vma_to_mm(struct ma_state *mas, struct mm_struct *mm,
|
||||
BUG_ON(!vma->vm_region);
|
||||
|
||||
setup_vma_to_mm(vma, mm);
|
||||
mm->map_count++;
|
||||
|
||||
/* add the VMA to the tree */
|
||||
vma_mas_store(vma, mas);
|
||||
@@ -1347,6 +1347,7 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
if (vma->vm_file)
|
||||
return -ENOMEM;
|
||||
|
||||
mm = vma->vm_mm;
|
||||
if (mm->map_count >= sysctl_max_map_count)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -1398,6 +1399,7 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
mas_set_range(&mas, vma->vm_start, vma->vm_end - 1);
|
||||
mas_store(&mas, vma);
|
||||
vma_mas_store(new, &mas);
|
||||
mm->map_count++;
|
||||
return 0;
|
||||
|
||||
err_mas_preallocate:
|
||||
|
||||
Reference in New Issue
Block a user