|
@@ -1814,11 +1814,14 @@ static int expand_downwards(struct vm_area_struct *vma,
|
|
|
size = vma->vm_end - address;
|
|
|
grow = (vma->vm_start - address) >> PAGE_SHIFT;
|
|
|
|
|
|
- error = acct_stack_growth(vma, size, grow);
|
|
|
- if (!error) {
|
|
|
- vma->vm_start = address;
|
|
|
- vma->vm_pgoff -= grow;
|
|
|
- perf_event_mmap(vma);
|
|
|
+ error = -ENOMEM;
|
|
|
+ if (grow <= vma->vm_pgoff) {
|
|
|
+ error = acct_stack_growth(vma, size, grow);
|
|
|
+ if (!error) {
|
|
|
+ vma->vm_start = address;
|
|
|
+ vma->vm_pgoff -= grow;
|
|
|
+ perf_event_mmap(vma);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
vma_unlock_anon_vma(vma);
|