|
@@ -1477,6 +1477,7 @@ static int acct_stack_growth(struct vm_area_struct * vma, unsigned long size, un
|
|
{
|
|
{
|
|
struct mm_struct *mm = vma->vm_mm;
|
|
struct mm_struct *mm = vma->vm_mm;
|
|
struct rlimit *rlim = current->signal->rlim;
|
|
struct rlimit *rlim = current->signal->rlim;
|
|
|
|
+ unsigned long new_start;
|
|
|
|
|
|
/* address space limit tests */
|
|
/* address space limit tests */
|
|
if (!may_expand_vm(mm, grow))
|
|
if (!may_expand_vm(mm, grow))
|
|
@@ -1496,6 +1497,12 @@ static int acct_stack_growth(struct vm_area_struct * vma, unsigned long size, un
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /* Check to ensure the stack will not grow into a hugetlb-only region */
|
|
|
|
+ new_start = (vma->vm_flags & VM_GROWSUP) ? vma->vm_start :
|
|
|
|
+ vma->vm_end - size;
|
|
|
|
+ if (is_hugepage_only_range(vma->vm_mm, new_start, size))
|
|
|
|
+ return -EFAULT;
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Overcommit.. This must be the final test, as it will
|
|
* Overcommit.. This must be the final test, as it will
|
|
* update security statistics.
|
|
* update security statistics.
|