[PATCH] small fix for not releasing the mmap semaphore in i386/arch_setup_additional_pages
the VDSO randomization code on i386 fails to release the mmap semaphore if insert_vm_struct() fails. [ Made the conditional unlikely. -- Linus ] Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
a39727f212
commit
79bc79b07c
|
@ -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)
|
if (unlikely(ret)) {
|
||||||
goto free_vma;
|
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)
|
||||||
|
|
Loading…
Reference in New Issue