]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
sparc64: Do not clobber %g7 in setcontext() trap.
authorDavid S. Miller <davem@davemloft.net>
Fri, 1 Aug 2008 03:40:46 +0000 (20:40 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 20 Aug 2008 18:05:05 +0000 (11:05 -0700)
[ Upstream commit 0a4949c4414af2eb91414bcd8e2a8ac3706f7dde ]

That's the userland thread register, so we should never try to change
it like this.

Based upon glibc bug nptl/6577 and suggestions by Jakub Jelinek.

Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
arch/sparc64/kernel/signal.c

index 9667e96fd5138ba3531f507d8292483e40242a80..10a12cb2cf9c9b46b83425921b8a4e5bca1b9eeb 100644 (file)
@@ -2,7 +2,7 @@
  *  arch/sparc64/kernel/signal.c
  *
  *  Copyright (C) 1991, 1992  Linus Torvalds
- *  Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
+ *  Copyright (C) 1995, 2008 David S. Miller (davem@davemloft.net)
  *  Copyright (C) 1996 Miguel de Icaza (miguel@nuclecu.unam.mx)
  *  Copyright (C) 1997 Eddie C. Dost   (ecd@skynet.be)
  *  Copyright (C) 1997,1998 Jakub Jelinek   (jj@sunsite.mff.cuni.cz)
@@ -89,7 +89,9 @@ asmlinkage void sparc64_set_context(struct pt_regs *regs)
        err |= __get_user(regs->u_regs[UREG_G4], (&(*grp)[MC_G4]));
        err |= __get_user(regs->u_regs[UREG_G5], (&(*grp)[MC_G5]));
        err |= __get_user(regs->u_regs[UREG_G6], (&(*grp)[MC_G6]));
-       err |= __get_user(regs->u_regs[UREG_G7], (&(*grp)[MC_G7]));
+
+       /* Skip %g7 as that's the thread register in userspace.  */
+
        err |= __get_user(regs->u_regs[UREG_I0], (&(*grp)[MC_O0]));
        err |= __get_user(regs->u_regs[UREG_I1], (&(*grp)[MC_O1]));
        err |= __get_user(regs->u_regs[UREG_I2], (&(*grp)[MC_O2]));