|
@@ -2462,6 +2462,7 @@ int install_special_mapping(struct mm_struct *mm,
|
|
|
unsigned long addr, unsigned long len,
|
|
|
unsigned long vm_flags, struct page **pages)
|
|
|
{
|
|
|
+ int ret;
|
|
|
struct vm_area_struct *vma;
|
|
|
|
|
|
vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
|
|
@@ -2479,16 +2480,23 @@ int install_special_mapping(struct mm_struct *mm,
|
|
|
vma->vm_ops = &special_mapping_vmops;
|
|
|
vma->vm_private_data = pages;
|
|
|
|
|
|
- if (unlikely(insert_vm_struct(mm, vma))) {
|
|
|
- kmem_cache_free(vm_area_cachep, vma);
|
|
|
- return -ENOMEM;
|
|
|
- }
|
|
|
+ ret = security_file_mmap(NULL, 0, 0, 0, vma->vm_start, 1);
|
|
|
+ if (ret)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ ret = insert_vm_struct(mm, vma);
|
|
|
+ if (ret)
|
|
|
+ goto out;
|
|
|
|
|
|
mm->total_vm += len >> PAGE_SHIFT;
|
|
|
|
|
|
perf_event_mmap(vma);
|
|
|
|
|
|
return 0;
|
|
|
+
|
|
|
+out:
|
|
|
+ kmem_cache_free(vm_area_cachep, vma);
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static DEFINE_MUTEX(mm_all_locks_mutex);
|