[PARISC] fix personality flag check in copy_thread()
Directly comparing task_struct->personality against PER_* is not fully correct, as it doesn't take flags potentially stored in top three bytes into account. Analogically, directly forcefully setting personality to PER_LINUX32 or PER_LINUX discards any flags stored in the top three bytes. Signed-off-by: Jiri Kosina <jkosina@suse.cz> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:

committed by
James Bottomley

parent
bba3d8c3b3
commit
5b24c42162
@@ -225,12 +225,12 @@ long parisc_personality(unsigned long personality)
|
||||
long err;
|
||||
|
||||
if (personality(current->personality) == PER_LINUX32
|
||||
&& personality == PER_LINUX)
|
||||
personality = PER_LINUX32;
|
||||
&& personality(personality) == PER_LINUX)
|
||||
personality = (personality & ~PER_MASK) | PER_LINUX32;
|
||||
|
||||
err = sys_personality(personality);
|
||||
if (err == PER_LINUX32)
|
||||
err = PER_LINUX;
|
||||
if (personality(err) == PER_LINUX32)
|
||||
err = (err & ~PER_MASK) | PER_LINUX;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
Reference in New Issue
Block a user