diff options
Diffstat (limited to 'mm/mmap.c')
| -rw-r--r-- | mm/mmap.c | 15 |
1 files changed, 9 insertions, 6 deletions
| @@ -259,7 +259,7 @@ SYSCALL_DEFINE1(brk, unsigned long, brk) | |||
| 259 | * randomize_va_space to 2, which will still cause mm->start_brk | 259 | * randomize_va_space to 2, which will still cause mm->start_brk |
| 260 | * to be arbitrarily shifted | 260 | * to be arbitrarily shifted |
| 261 | */ | 261 | */ |
| 262 | if (mm->start_brk > PAGE_ALIGN(mm->end_data)) | 262 | if (current->brk_randomized) |
| 263 | min_brk = mm->start_brk; | 263 | min_brk = mm->start_brk; |
| 264 | else | 264 | else |
| 265 | min_brk = mm->end_data; | 265 | min_brk = mm->end_data; |
| @@ -1814,11 +1814,14 @@ static int expand_downwards(struct vm_area_struct *vma, | |||
| 1814 | size = vma->vm_end - address; | 1814 | size = vma->vm_end - address; |
| 1815 | grow = (vma->vm_start - address) >> PAGE_SHIFT; | 1815 | grow = (vma->vm_start - address) >> PAGE_SHIFT; |
| 1816 | 1816 | ||
| 1817 | error = acct_stack_growth(vma, size, grow); | 1817 | error = -ENOMEM; |
| 1818 | if (!error) { | 1818 | if (grow <= vma->vm_pgoff) { |
| 1819 | vma->vm_start = address; | 1819 | error = acct_stack_growth(vma, size, grow); |
| 1820 | vma->vm_pgoff -= grow; | 1820 | if (!error) { |
| 1821 | perf_event_mmap(vma); | 1821 | vma->vm_start = address; |
| 1822 | vma->vm_pgoff -= grow; | ||
| 1823 | perf_event_mmap(vma); | ||
| 1824 | } | ||
| 1822 | } | 1825 | } |
| 1823 | } | 1826 | } |
| 1824 | vma_unlock_anon_vma(vma); | 1827 | vma_unlock_anon_vma(vma); |
