diff options
author | Jiri Kosina <jkosina@suse.cz> | 2012-08-02 09:33:59 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2012-08-03 06:25:12 -0400 |
commit | 5b24c421621792fcc588af6f644d6acf2dd798cc (patch) | |
tree | bc89e67b20c47a8bacde1b82d087054e941aee24 /arch/parisc/kernel/process.c | |
parent | bba3d8c3b3c0f2123be5bc687d1cddc13437c923 (diff) |
[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>
Diffstat (limited to 'arch/parisc/kernel/process.c')
-rw-r--r-- | arch/parisc/kernel/process.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/parisc/kernel/process.c b/arch/parisc/kernel/process.c index d4b94b395c1..2c05a9292a8 100644 --- a/arch/parisc/kernel/process.c +++ b/arch/parisc/kernel/process.c | |||
@@ -309,7 +309,7 @@ copy_thread(unsigned long clone_flags, unsigned long usp, | |||
309 | cregs->ksp = (unsigned long)stack | 309 | cregs->ksp = (unsigned long)stack |
310 | + (pregs->gr[21] & (THREAD_SIZE - 1)); | 310 | + (pregs->gr[21] & (THREAD_SIZE - 1)); |
311 | cregs->gr[30] = usp; | 311 | cregs->gr[30] = usp; |
312 | if (p->personality == PER_HPUX) { | 312 | if (personality(p->personality) == PER_HPUX) { |
313 | #ifdef CONFIG_HPUX | 313 | #ifdef CONFIG_HPUX |
314 | cregs->kpc = (unsigned long) &hpux_child_return; | 314 | cregs->kpc = (unsigned long) &hpux_child_return; |
315 | #else | 315 | #else |