|
@@ -148,8 +148,10 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int exstack)
|
|
vma->vm_mm = mm;
|
|
vma->vm_mm = mm;
|
|
|
|
|
|
ret = insert_vm_struct(mm, vma);
|
|
ret = insert_vm_struct(mm, vma);
|
|
- if (ret)
|
|
|
|
- goto free_vma;
|
|
|
|
|
|
+ if (unlikely(ret)) {
|
|
|
|
+ kmem_cache_free(vm_area_cachep, vma);
|
|
|
|
+ goto up_fail;
|
|
|
|
+ }
|
|
|
|
|
|
current->mm->context.vdso = (void *)addr;
|
|
current->mm->context.vdso = (void *)addr;
|
|
current_thread_info()->sysenter_return =
|
|
current_thread_info()->sysenter_return =
|
|
@@ -158,10 +160,6 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int exstack)
|
|
up_fail:
|
|
up_fail:
|
|
up_write(&mm->mmap_sem);
|
|
up_write(&mm->mmap_sem);
|
|
return ret;
|
|
return ret;
|
|
-
|
|
|
|
-free_vma:
|
|
|
|
- kmem_cache_free(vm_area_cachep, vma);
|
|
|
|
- return ret;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
const char *arch_vma_name(struct vm_area_struct *vma)
|
|
const char *arch_vma_name(struct vm_area_struct *vma)
|