]> git.hungrycats.org Git - linux/commitdiff
[PATCH] uml: fix a signal race
authorJeff Dike <jdike@addtoit.com>
Fri, 17 Sep 2004 05:10:32 +0000 (22:10 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Fri, 17 Sep 2004 05:10:32 +0000 (22:10 -0700)
This patch saves and restores UML's idea of user mode across an interrupt.
Without this, an interrupt arriving at the wrong time can cause UML to lose
track of whether an interrupted handler is handing a userspace interrupt.

From: Ingo Molnar
Signed-off-by: Jeff Dike <jdike@addtoit.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/um/kernel/skas/trap_user.c

index 2c47e78c1ebc68b17492a9f4a1c3e0126e6fa32e..96593709a6e169c9b9a40ee5b480004d6d235062 100644 (file)
@@ -19,8 +19,10 @@ void sig_handler_common_skas(int sig, void *sc_ptr)
        struct skas_regs *r;
        struct signal_info *info;
        int save_errno = errno;
+       int save_user;
 
        r = &TASK_REGS(get_current())->skas;
+       save_user = r->is_user;
        r->is_user = 0;
        r->fault_addr = SC_FAULT_ADDR(sc);
        r->fault_type = SC_FAULT_TYPE(sc);
@@ -33,6 +35,7 @@ void sig_handler_common_skas(int sig, void *sc_ptr)
        (*info->handler)(sig, (union uml_pt_regs *) r);
 
        errno = save_errno;
+       r->is_user = save_user;
 }
 
 void user_signal(int sig, union uml_pt_regs *regs)