UML - arch_prctl should set thread fs
PATCH 1/1 UML - arch_prctl should set thread fs
[ Andrew, this is definite 2.6.21 material ]
In my previous x86_64 thread fix, I forgot to initialize thread.arch.fs in arch_prctl. A process calling arch_prctl to set %fs would lose it on the next context switch.
It also turns out that you can switch to a process which is in the process of exiting and which has lost its mm. In this case, it's worse than useless to try to call arch_prctl on the host process.
Signed-off-by Jeff Dike <[email protected]>
--
arch/um/sys-x86_64/syscalls.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
arch/um/sys-x86_64/syscalls.c +4 -2
@@ -103,6 +103,9 @@ long arch_prctl_skas(struct task_structswitch (code){case ARCH_SET_FS : + current->thread.arch.fs = (unsigned long ) ptr; +save_registers (pid, ¤t->thread.regs.regs); +break ;case ARCH_SET_GS :save_registers (pid, ¤t->thread.regs.regs);break ;
@@ -140,9 +143,8 @@ long sys_clone(unsigned long clone_flagsvoid arch_switch_to_skas (struct task_struct *from,struct task_struct *to) { -if (to->thread.arch.fs ==0 ) +if ((to->thread.arch.fs ==0 ) || (to->mm ==NULL ))return ;arch_prctl_skas (to,ARCH_SET_FS , (void __user *) to->thread.arch.fs); } -