diff options
| -rw-r--r-- | fs/exec.c | 5 | ||||
| -rw-r--r-- | mm/mmap.c | 16 |
2 files changed, 17 insertions, 4 deletions
| @@ -275,6 +275,11 @@ static int __bprm_mm_init(struct linux_binprm *bprm) | |||
| 275 | vma->vm_flags = VM_STACK_FLAGS | VM_STACK_INCOMPLETE_SETUP; | 275 | vma->vm_flags = VM_STACK_FLAGS | VM_STACK_INCOMPLETE_SETUP; |
| 276 | vma->vm_page_prot = vm_get_page_prot(vma->vm_flags); | 276 | vma->vm_page_prot = vm_get_page_prot(vma->vm_flags); |
| 277 | INIT_LIST_HEAD(&vma->anon_vma_chain); | 277 | INIT_LIST_HEAD(&vma->anon_vma_chain); |
| 278 | |||
| 279 | err = security_file_mmap(NULL, 0, 0, 0, vma->vm_start, 1); | ||
| 280 | if (err) | ||
| 281 | goto err; | ||
| 282 | |||
| 278 | err = insert_vm_struct(mm, vma); | 283 | err = insert_vm_struct(mm, vma); |
| 279 | if (err) | 284 | if (err) |
| 280 | goto err; | 285 | goto err; |
| @@ -2462,6 +2462,7 @@ int install_special_mapping(struct mm_struct *mm, | |||
| 2462 | unsigned long addr, unsigned long len, | 2462 | unsigned long addr, unsigned long len, |
| 2463 | unsigned long vm_flags, struct page **pages) | 2463 | unsigned long vm_flags, struct page **pages) |
| 2464 | { | 2464 | { |
| 2465 | int ret; | ||
| 2465 | struct vm_area_struct *vma; | 2466 | struct vm_area_struct *vma; |
| 2466 | 2467 | ||
| 2467 | vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL); | 2468 | vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL); |
| @@ -2479,16 +2480,23 @@ int install_special_mapping(struct mm_struct *mm, | |||
| 2479 | vma->vm_ops = &special_mapping_vmops; | 2480 | vma->vm_ops = &special_mapping_vmops; |
| 2480 | vma->vm_private_data = pages; | 2481 | vma->vm_private_data = pages; |
| 2481 | 2482 | ||
| 2482 | if (unlikely(insert_vm_struct(mm, vma))) { | 2483 | ret = security_file_mmap(NULL, 0, 0, 0, vma->vm_start, 1); |
| 2483 | kmem_cache_free(vm_area_cachep, vma); | 2484 | if (ret) |
| 2484 | return -ENOMEM; | 2485 | goto out; |
| 2485 | } | 2486 | |
| 2487 | ret = insert_vm_struct(mm, vma); | ||
| 2488 | if (ret) | ||
| 2489 | goto out; | ||
| 2486 | 2490 | ||
| 2487 | mm->total_vm += len >> PAGE_SHIFT; | 2491 | mm->total_vm += len >> PAGE_SHIFT; |
| 2488 | 2492 | ||
| 2489 | perf_event_mmap(vma); | 2493 | perf_event_mmap(vma); |
| 2490 | 2494 | ||
| 2491 | return 0; | 2495 | return 0; |
| 2496 | |||
| 2497 | out: | ||
| 2498 | kmem_cache_free(vm_area_cachep, vma); | ||
| 2499 | return ret; | ||
| 2492 | } | 2500 | } |
| 2493 | 2501 | ||
| 2494 | static DEFINE_MUTEX(mm_all_locks_mutex); | 2502 | static DEFINE_MUTEX(mm_all_locks_mutex); |
