diff options
Diffstat (limited to 'arch/arm/kernel/elf.c')
| -rw-r--r-- | arch/arm/kernel/elf.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/arch/arm/kernel/elf.c b/arch/arm/kernel/elf.c index d4a0da1e48f4..9b05c6a0dcea 100644 --- a/arch/arm/kernel/elf.c +++ b/arch/arm/kernel/elf.c | |||
| @@ -40,15 +40,22 @@ EXPORT_SYMBOL(elf_check_arch); | |||
| 40 | void elf_set_personality(const struct elf32_hdr *x) | 40 | void elf_set_personality(const struct elf32_hdr *x) |
| 41 | { | 41 | { |
| 42 | unsigned int eflags = x->e_flags; | 42 | unsigned int eflags = x->e_flags; |
| 43 | unsigned int personality = PER_LINUX_32BIT; | 43 | unsigned int personality = current->personality & ~PER_MASK; |
| 44 | |||
| 45 | /* | ||
| 46 | * We only support Linux ELF executables, so always set the | ||
| 47 | * personality to LINUX. | ||
| 48 | */ | ||
| 49 | personality |= PER_LINUX; | ||
| 44 | 50 | ||
| 45 | /* | 51 | /* |
| 46 | * APCS-26 is only valid for OABI executables | 52 | * APCS-26 is only valid for OABI executables |
| 47 | */ | 53 | */ |
| 48 | if ((eflags & EF_ARM_EABI_MASK) == EF_ARM_EABI_UNKNOWN) { | 54 | if ((eflags & EF_ARM_EABI_MASK) == EF_ARM_EABI_UNKNOWN && |
| 49 | if (eflags & EF_ARM_APCS_26) | 55 | (eflags & EF_ARM_APCS_26)) |
| 50 | personality = PER_LINUX; | 56 | personality &= ~ADDR_LIMIT_32BIT; |
| 51 | } | 57 | else |
| 58 | personality |= ADDR_LIMIT_32BIT; | ||
| 52 | 59 | ||
| 53 | set_personality(personality); | 60 | set_personality(personality); |
| 54 | 61 | ||
