Al Viro
392fb6e354
alpha: unb0rk sigsuspend() and rt_sigsuspend()
...
Old code used to set regs->r0 and regs->r19 to force the right
return value. Leaving that after switch to ERESTARTNOHAND
was a Bad Idea(tm), since now that screws the restart - if we
hit the case when get_signal_to_deliver() returns 0, we will
step back to syscall insn, with v0 set to EINTR and a3 to 1.
The latter won't matter, since EINTR is 4, aka __NR_write.
Testcase:
#include <signal.h>
#define _GNU_SOURCE
#include <unistd.h>
#include <sys/syscall.h>
main()
{
sigset_t mask;
sigemptyset(&mask);
sigaddset(&mask, SIGCONT);
sigprocmask(SIG_SETMASK, &mask, NULL);
kill(0, SIGCONT);
syscall(__NR_sigsuspend, 1, "b0rken\n", 7);
}
results on alpha in immediate message to stdout...
Fix is obvious; moreover, since we don't need regs anymore, we can
switch to normal prototypes for these guys and lose the wrappers.
Even better, rt_sigsuspend() is identical to generic version in
kernel/signal.c now.
Tested-by: Michael Cree <mcree@orcon.net.nz >
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk >
Signed-off-by: Matt Turner <mattst88@gmail.com >
2010-09-18 23:08:28 -04:00
..
2009-06-16 19:47:27 -07:00
2008-08-15 09:19:40 -07:00
2008-10-16 11:21:38 -07:00
2008-08-15 09:19:40 -07:00
2009-08-03 09:05:00 +01:00
2009-12-12 13:08:14 +01:00
2010-05-17 07:57:27 -07:00
2008-08-15 09:19:40 -07:00
2009-05-02 15:36:10 -07:00
2010-06-15 14:19:07 -04:00
2009-06-11 21:02:14 +02:00
2009-12-18 01:14:52 -05:00
2008-08-15 09:19:40 -07:00
2009-01-14 19:56:50 -08:00
2010-08-31 22:45:31 -04:00
2010-09-18 23:06:18 -04:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2010-03-18 22:35:28 -04:00
2010-03-18 22:35:28 -04:00
2008-08-15 09:19:40 -07:00
2009-12-14 23:55:32 +01:00
2010-03-18 22:35:28 -04:00
2010-03-18 22:35:28 -04:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2010-08-11 08:59:21 -07:00
2008-08-15 09:19:40 -07:00
2009-12-16 07:20:12 -08:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2009-06-07 05:01:00 -07:00
2008-08-15 09:19:40 -07:00
2009-12-17 11:03:24 -05:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2009-03-02 16:49:37 -05:00
2009-05-02 15:36:10 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2009-09-22 07:17:43 -07:00
2010-08-09 20:45:03 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-12-29 08:29:51 +01:00
2008-08-15 09:19:40 -07:00
2010-08-10 13:47:39 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2010-08-14 22:26:51 +02:00
2008-08-15 09:19:40 -07:00
2009-06-16 19:47:51 -07:00
2008-08-15 09:19:40 -07:00
2010-06-09 11:12:36 +02:00
2010-01-05 15:34:49 +09:00
2009-04-01 08:59:16 -07:00
2008-08-15 09:19:40 -07:00
2009-09-22 07:17:41 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2009-06-11 21:02:17 +02:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2010-03-12 15:52:42 -08:00
2009-06-30 18:55:59 -07:00
2010-08-09 20:45:04 -07:00
2009-01-15 16:39:40 -08:00
2010-02-20 16:41:46 +00:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2010-03-12 15:52:38 -08:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2009-01-15 16:39:40 -08:00
2008-08-15 09:19:40 -07:00
2010-08-07 18:15:50 +02:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2009-06-11 21:01:52 +02:00
2009-09-24 09:34:47 +09:30
2009-10-12 13:26:31 -07:00
2008-08-15 09:19:40 -07:00
2009-12-14 23:55:32 +01:00
2009-12-14 23:55:32 +01:00
2008-08-15 09:19:40 -07:00
2009-02-01 11:01:22 +05:30
2008-08-15 09:19:40 -07:00
2009-02-01 11:01:22 +05:30
2008-08-15 09:19:40 -07:00
2009-04-01 08:59:16 -07:00
2010-08-10 13:47:39 -07:00
2008-08-15 09:19:40 -07:00
2010-05-14 11:13:27 +02:00
2008-08-15 09:19:40 -07:00
2009-07-27 12:10:38 -07:00
2009-06-24 15:13:52 +09:00
2010-01-14 13:21:35 -05:00
2009-06-11 21:02:14 +02:00
2009-05-02 15:36:10 -07:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2010-09-18 23:08:28 -04:00
2008-08-15 09:19:40 -07:00
2008-08-15 09:19:40 -07:00
2010-08-09 20:45:04 -07:00
2009-04-01 08:59:16 -07:00
2008-08-15 09:19:40 -07:00