frv: restart_block.fn needs to be reset on sigreturn
authorAl Viro <viro@ftp.linux.org.uk>
Mon, 20 Sep 2010 14:13:04 +0000 (15:13 +0100)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 20 Sep 2010 17:44:37 +0000 (10:44 -0700)
Reset restart_block.fn on executing a sigreturn such that any currently
pending system call restarts will be forced to return -EINTR.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/frv/kernel/signal.c

index 0974c0ecc594817ee9d8067aeba0eee7e3379dbf..7fc29615ef0132129c46d44fb4561ba084f4a1c2 100644 (file)
@@ -121,6 +121,9 @@ static int restore_sigcontext(struct sigcontext __user *sc, int *_gr8)
        struct user_context *user = current->thread.user;
        unsigned long tbr, psr;
 
+       /* Always make any pending restarted system calls return -EINTR */
+       current_thread_info()->restart_block.fn = do_no_restart_syscall;
+
        tbr = user->i.tbr;
        psr = user->i.psr;
        if (copy_from_user(user, &sc->sc_context, sizeof(sc->sc_context)))