[PATCH] UML - Fix a signal race

From: Jeff Dike
Date: Tue Sep 14 2004 - 01:38:05 EST


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@xxxxxxxxxxx>

Index: 2.6.9-rc2/arch/um/kernel/skas/trap_user.c
===================================================================
--- 2.6.9-rc2.orig/arch/um/kernel/skas/trap_user.c 2004-09-14 02:03:52.000000000 -0400
+++ 2.6.9-rc2/arch/um/kernel/skas/trap_user.c 2004-09-14 02:04:00.000000000 -0400
@@ -19,8 +19,10 @@
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 @@
(*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)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/