| From | Arnd Bergmann <> | Subject | Re: [PATCH v2 16/31] arm64: ELF definitions | Date | Wed, 15 Aug 2012 14:15:39 +0000 |
| |
On Tuesday 14 August 2012, Catalin Marinas wrote: > + > +void elf_set_personality(int personality) > +{ > + switch (personality & PER_MASK) { > + case PER_LINUX: > + clear_thread_flag(TIF_32BIT); > + break; > + case PER_LINUX32: > + set_thread_flag(TIF_32BIT); > + break; > + default: > + pr_warning("Process %s tried to assume unknown personality %d\n", > + current->comm, personality); > + return; > + } > + > + current->personality = personality; > +} > +EXPORT_SYMBOL(elf_set_personality);
This looks wrong: PER_LINUX/PER_LINUX32 decides over the output of the uname system call, while TIF_32BIT decides over the instruction set when returning to user space. You definitely should not set the personality to the value you pass from the elf loader. Instead, just do
#define SET_PERSONALITY(ex) clear_thread_flag(TIF_32BIT); #defined COMPAT_SET_PERSONALITY(ex) set_thread_flag(TIF_32BIT);
I also don't see a reason to export this. You'd have trouble loading the elf interpreter module from user space without the elf interpreter.
Arnd
|