Commit 59da95c4 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] mremap: check map_count

From: Hugh Dickins <hugh@veritas.com>

mremap's move_vma should think ahead to lessen the chance of failure during
its rewind on failure: running out of memory always possible, but it's silly
for it to embark when it's near the map_count limit.
parent 2039e7b5
...@@ -176,6 +176,13 @@ static unsigned long move_vma(struct vm_area_struct *vma, ...@@ -176,6 +176,13 @@ static unsigned long move_vma(struct vm_area_struct *vma,
unsigned long excess = 0; unsigned long excess = 0;
int split = 0; int split = 0;
/*
* We'd prefer to avoid failure later on in do_munmap:
* which may split one vma into three before unmapping.
*/
if (mm->map_count >= sysctl_max_map_count - 3)
return -ENOMEM;
new_pgoff = vma->vm_pgoff + ((old_addr - vma->vm_start) >> PAGE_SHIFT); new_pgoff = vma->vm_pgoff + ((old_addr - vma->vm_start) >> PAGE_SHIFT);
new_vma = copy_vma(vma, new_addr, new_len, new_pgoff); new_vma = copy_vma(vma, new_addr, new_len, new_pgoff);
if (!new_vma) if (!new_vma)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment