summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2006-09-20 15:58:54 +0200
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2006-09-20 15:58:54 +0200
commit8427082a506f7ae0abf82ce0047a045ec4309e59 (patch)
treeddd756abcf3fe2241ce4a8d322a11e0404fb345f
parent39b083fe1c3c7b88939f6fa1b0b96e579f12e96f (diff)
[S390] fix syscall restart handling.
If do_signal() gets called several times before returning to user space and no signal is pending (e.g. cancelled by a debugger) syscall restart handling could be done several times. This would change the user space PSW to an address prior to the syscall instruction. Fix this by making sure that syscall restart handling is only done once. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r--arch/s390/kernel/signal.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c
index a887b686f27..dd05423f87a 100644
--- a/arch/s390/kernel/signal.c
+++ b/arch/s390/kernel/signal.c
@@ -457,6 +457,7 @@ void do_signal(struct pt_regs *regs)
case -ERESTART_RESTARTBLOCK:
regs->gprs[2] = -EINTR;
}
+ regs->trap = -1; /* Don't deal with this again. */
}
/* Get signal to deliver. When running under ptrace, at this point