diff options
Diffstat (limited to 'arch/mips/kernel/linux32.c')
| -rw-r--r-- | arch/mips/kernel/linux32.c | 13 | 
1 files changed, 7 insertions, 6 deletions
diff --git a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c index 6343b4a5b83..876a75cc376 100644 --- a/arch/mips/kernel/linux32.c +++ b/arch/mips/kernel/linux32.c @@ -251,14 +251,15 @@ SYSCALL_DEFINE5(n32_msgrcv, int, msqid, u32, msgp, size_t, msgsz,  SYSCALL_DEFINE1(32_personality, unsigned long, personality)  { +	unsigned int p = personality & 0xffffffff;  	int ret; -	personality &= 0xffffffff; +  	if (personality(current->personality) == PER_LINUX32 && -	    personality == PER_LINUX) -		personality = PER_LINUX32; -	ret = sys_personality(personality); -	if (ret == PER_LINUX32) -		ret = PER_LINUX; +	    personality(p) == PER_LINUX) +		p = (p & ~PER_MASK) | PER_LINUX32; +	ret = sys_personality(p); +	if (ret != -1 && personality(ret) == PER_LINUX32) +		ret = (ret & ~PER_MASK) | PER_LINUX;  	return ret;  }  |