diff options
Diffstat (limited to 'fs/binfmt_elf.c')
| -rw-r--r-- | fs/binfmt_elf.c | 27 |
1 files changed, 2 insertions, 25 deletions
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index edd90c49003c..fd5b2ea5d299 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c | |||
| @@ -662,27 +662,6 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs) | |||
| 662 | if (elf_interpreter[elf_ppnt->p_filesz - 1] != '\0') | 662 | if (elf_interpreter[elf_ppnt->p_filesz - 1] != '\0') |
| 663 | goto out_free_interp; | 663 | goto out_free_interp; |
| 664 | 664 | ||
| 665 | /* | ||
| 666 | * The early SET_PERSONALITY here is so that the lookup | ||
| 667 | * for the interpreter happens in the namespace of the | ||
| 668 | * to-be-execed image. SET_PERSONALITY can select an | ||
| 669 | * alternate root. | ||
| 670 | * | ||
| 671 | * However, SET_PERSONALITY is NOT allowed to switch | ||
| 672 | * this task into the new images's memory mapping | ||
| 673 | * policy - that is, TASK_SIZE must still evaluate to | ||
| 674 | * that which is appropriate to the execing application. | ||
| 675 | * This is because exit_mmap() needs to have TASK_SIZE | ||
| 676 | * evaluate to the size of the old image. | ||
| 677 | * | ||
| 678 | * So if (say) a 64-bit application is execing a 32-bit | ||
| 679 | * application it is the architecture's responsibility | ||
| 680 | * to defer changing the value of TASK_SIZE until the | ||
| 681 | * switch really is going to happen - do this in | ||
| 682 | * flush_thread(). - akpm | ||
| 683 | */ | ||
| 684 | SET_PERSONALITY(loc->elf_ex); | ||
| 685 | |||
| 686 | interpreter = open_exec(elf_interpreter); | 665 | interpreter = open_exec(elf_interpreter); |
| 687 | retval = PTR_ERR(interpreter); | 666 | retval = PTR_ERR(interpreter); |
| 688 | if (IS_ERR(interpreter)) | 667 | if (IS_ERR(interpreter)) |
| @@ -730,9 +709,6 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs) | |||
| 730 | /* Verify the interpreter has a valid arch */ | 709 | /* Verify the interpreter has a valid arch */ |
| 731 | if (!elf_check_arch(&loc->interp_elf_ex)) | 710 | if (!elf_check_arch(&loc->interp_elf_ex)) |
| 732 | goto out_free_dentry; | 711 | goto out_free_dentry; |
| 733 | } else { | ||
| 734 | /* Executables without an interpreter also need a personality */ | ||
| 735 | SET_PERSONALITY(loc->elf_ex); | ||
| 736 | } | 712 | } |
| 737 | 713 | ||
| 738 | /* Flush all traces of the currently running executable */ | 714 | /* Flush all traces of the currently running executable */ |
| @@ -752,7 +728,8 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs) | |||
| 752 | 728 | ||
| 753 | if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space) | 729 | if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space) |
| 754 | current->flags |= PF_RANDOMIZE; | 730 | current->flags |= PF_RANDOMIZE; |
| 755 | arch_pick_mmap_layout(current->mm); | 731 | |
| 732 | setup_new_exec(bprm); | ||
| 756 | 733 | ||
| 757 | /* Do this so that we can load the interpreter, if need be. We will | 734 | /* Do this so that we can load the interpreter, if need be. We will |
| 758 | change some of these later */ | 735 | change some of these later */ |
