|
@@ -738,10 +738,8 @@ static int load_elf_binary(struct linux_binprm *bprm)
|
|
|
change some of these later */
|
|
|
retval = setup_arg_pages(bprm, randomize_stack_top(STACK_TOP),
|
|
|
executable_stack);
|
|
|
- if (retval < 0) {
|
|
|
- send_sig(SIGKILL, current, 0);
|
|
|
+ if (retval < 0)
|
|
|
goto out_free_dentry;
|
|
|
- }
|
|
|
|
|
|
current->mm->start_stack = bprm->p;
|
|
|
|
|
@@ -763,10 +761,8 @@ static int load_elf_binary(struct linux_binprm *bprm)
|
|
|
and clear the area. */
|
|
|
retval = set_brk(elf_bss + load_bias,
|
|
|
elf_brk + load_bias);
|
|
|
- if (retval) {
|
|
|
- send_sig(SIGKILL, current, 0);
|
|
|
+ if (retval)
|
|
|
goto out_free_dentry;
|
|
|
- }
|
|
|
nbyte = ELF_PAGEOFFSET(elf_bss);
|
|
|
if (nbyte) {
|
|
|
nbyte = ELF_MIN_ALIGN - nbyte;
|
|
@@ -820,7 +816,6 @@ static int load_elf_binary(struct linux_binprm *bprm)
|
|
|
error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt,
|
|
|
elf_prot, elf_flags, 0);
|
|
|
if (BAD_ADDR(error)) {
|
|
|
- send_sig(SIGKILL, current, 0);
|
|
|
retval = IS_ERR((void *)error) ?
|
|
|
PTR_ERR((void*)error) : -EINVAL;
|
|
|
goto out_free_dentry;
|
|
@@ -851,7 +846,6 @@ static int load_elf_binary(struct linux_binprm *bprm)
|
|
|
elf_ppnt->p_memsz > TASK_SIZE ||
|
|
|
TASK_SIZE - elf_ppnt->p_memsz < k) {
|
|
|
/* set_brk can never work. Avoid overflows. */
|
|
|
- send_sig(SIGKILL, current, 0);
|
|
|
retval = -EINVAL;
|
|
|
goto out_free_dentry;
|
|
|
}
|
|
@@ -883,12 +877,9 @@ static int load_elf_binary(struct linux_binprm *bprm)
|
|
|
* up getting placed where the bss needs to go.
|
|
|
*/
|
|
|
retval = set_brk(elf_bss, elf_brk);
|
|
|
- if (retval) {
|
|
|
- send_sig(SIGKILL, current, 0);
|
|
|
+ if (retval)
|
|
|
goto out_free_dentry;
|
|
|
- }
|
|
|
if (likely(elf_bss != elf_brk) && unlikely(padzero(elf_bss))) {
|
|
|
- send_sig(SIGSEGV, current, 0);
|
|
|
retval = -EFAULT; /* Nobody gets to see this, but.. */
|
|
|
goto out_free_dentry;
|
|
|
}
|
|
@@ -909,7 +900,6 @@ static int load_elf_binary(struct linux_binprm *bprm)
|
|
|
elf_entry += loc->interp_elf_ex.e_entry;
|
|
|
}
|
|
|
if (BAD_ADDR(elf_entry)) {
|
|
|
- force_sig(SIGSEGV, current);
|
|
|
retval = IS_ERR((void *)elf_entry) ?
|
|
|
(int)elf_entry : -EINVAL;
|
|
|
goto out_free_dentry;
|
|
@@ -922,7 +912,6 @@ static int load_elf_binary(struct linux_binprm *bprm)
|
|
|
} else {
|
|
|
elf_entry = loc->elf_ex.e_entry;
|
|
|
if (BAD_ADDR(elf_entry)) {
|
|
|
- force_sig(SIGSEGV, current);
|
|
|
retval = -EINVAL;
|
|
|
goto out_free_dentry;
|
|
|
}
|
|
@@ -934,19 +923,15 @@ static int load_elf_binary(struct linux_binprm *bprm)
|
|
|
|
|
|
#ifdef ARCH_HAS_SETUP_ADDITIONAL_PAGES
|
|
|
retval = arch_setup_additional_pages(bprm, !!elf_interpreter);
|
|
|
- if (retval < 0) {
|
|
|
- send_sig(SIGKILL, current, 0);
|
|
|
+ if (retval < 0)
|
|
|
goto out;
|
|
|
- }
|
|
|
#endif /* ARCH_HAS_SETUP_ADDITIONAL_PAGES */
|
|
|
|
|
|
install_exec_creds(bprm);
|
|
|
retval = create_elf_tables(bprm, &loc->elf_ex,
|
|
|
load_addr, interp_load_addr);
|
|
|
- if (retval < 0) {
|
|
|
- send_sig(SIGKILL, current, 0);
|
|
|
+ if (retval < 0)
|
|
|
goto out;
|
|
|
- }
|
|
|
/* N.B. passed_fileno might not be initialized? */
|
|
|
current->mm->end_code = end_code;
|
|
|
current->mm->start_code = start_code;
|