|
@@ -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;
|
|
|
}
|
|
|
|