kernel/signal.c: change do_signal_stop/do_sigaction to use while_each_thread()
authorOleg Nesterov <oleg@redhat.com>
Thu, 23 Jan 2014 23:55:56 +0000 (15:55 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 24 Jan 2014 00:37:02 +0000 (16:37 -0800)
Change do_signal_stop() and do_sigaction() to avoid next_thread() and use
while_each_thread() instead.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Kees Cook <keescook@chromium.org>
Reviewed-by: Sameer Nanda <snanda@chromium.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
kernel/signal.c

index 940b30e..52f881d 100644 (file)
@@ -2047,8 +2047,8 @@ static bool do_signal_stop(int signr)
                if (task_set_jobctl_pending(current, signr | gstop))
                        sig->group_stop_count++;
 
-               for (t = next_thread(current); t != current;
-                    t = next_thread(t)) {
+               = current;
+               while_each_thread(current, t) {
                        /*
                         * Setting state to TASK_STOPPED for a group
                         * stop is always done with the siglock held,
@@ -3125,8 +3125,7 @@ int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact)
                        rm_from_queue_full(&mask, &t->signal->shared_pending);
                        do {
                                rm_from_queue_full(&mask, &t->pending);
-                               t = next_thread(t);
-                       } while (t != current);
+                       } while_each_thread(current, t);
                }
        }