summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjdike <jdike>2004-02-16 00:11:15 +0000
committerjdike <jdike>2004-02-16 00:11:15 +0000
commit49610130b9b40072c35955627f038fddf454ea07 (patch)
tree2e869f1d6cb076c4440737edf73da4f7061f8d3a
parente43e0a1532f04b0189e83ba42b2ddf84917d71fb (diff)
downloaduml-history-49610130b9b40072c35955627f038fddf454ea07.tar.gz
Fixed a race which could cause a userspace signal to appear to have happened
in the kernel.
-rw-r--r--arch/um/kernel/skas/trap_user.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/um/kernel/skas/trap_user.c b/arch/um/kernel/skas/trap_user.c
index ef45cb9..380f351 100644
--- a/arch/um/kernel/skas/trap_user.c
+++ b/arch/um/kernel/skas/trap_user.c
@@ -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;
}
extern int missed_ticks[];