diff options
Diffstat (limited to 'fs/exec.c')
-rw-r--r-- | fs/exec.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -246,6 +246,7 @@ static int __bprm_mm_init(struct linux_binprm *bprm) | |||
246 | vma->vm_start = vma->vm_end - PAGE_SIZE; | 246 | vma->vm_start = vma->vm_end - PAGE_SIZE; |
247 | vma->vm_flags = VM_STACK_FLAGS; | 247 | vma->vm_flags = VM_STACK_FLAGS; |
248 | vma->vm_page_prot = vm_get_page_prot(vma->vm_flags); | 248 | vma->vm_page_prot = vm_get_page_prot(vma->vm_flags); |
249 | INIT_LIST_HEAD(&vma->anon_vma_chain); | ||
249 | err = insert_vm_struct(mm, vma); | 250 | err = insert_vm_struct(mm, vma); |
250 | if (err) | 251 | if (err) |
251 | goto err; | 252 | goto err; |
@@ -516,7 +517,8 @@ static int shift_arg_pages(struct vm_area_struct *vma, unsigned long shift) | |||
516 | /* | 517 | /* |
517 | * cover the whole range: [new_start, old_end) | 518 | * cover the whole range: [new_start, old_end) |
518 | */ | 519 | */ |
519 | vma_adjust(vma, new_start, old_end, vma->vm_pgoff, NULL); | 520 | if (vma_adjust(vma, new_start, old_end, vma->vm_pgoff, NULL)) |
521 | return -ENOMEM; | ||
520 | 522 | ||
521 | /* | 523 | /* |
522 | * move the page tables downwards, on failure we rely on | 524 | * move the page tables downwards, on failure we rely on |
@@ -547,7 +549,7 @@ static int shift_arg_pages(struct vm_area_struct *vma, unsigned long shift) | |||
547 | tlb_finish_mmu(tlb, new_end, old_end); | 549 | tlb_finish_mmu(tlb, new_end, old_end); |
548 | 550 | ||
549 | /* | 551 | /* |
550 | * shrink the vma to just the new range. | 552 | * Shrink the vma to just the new range. Always succeeds. |
551 | */ | 553 | */ |
552 | vma_adjust(vma, new_start, new_end, vma->vm_pgoff, NULL); | 554 | vma_adjust(vma, new_start, new_end, vma->vm_pgoff, NULL); |
553 | 555 | ||