posix-timers: Noralize good_sigevent
authorEric W. Biederman <ebiederm@xmission.com>
Sat, 21 Jul 2018 05:00:29 +0000 (00:00 -0500)
committerEric W. Biederman <ebiederm@xmission.com>
Sat, 21 Jul 2018 15:43:12 +0000 (10:43 -0500)
In good_sigevent directly compute the default return value as
"task_tgid(current)".  This is exactly the same as
"task_pid(current->group_leader)" but written more clearly.

In the thread case first compute the thread's pid.  Then veify that
attached to that pid is a thread of the current thread group.

This has the net effect of making the code a little clearer, and
making it obvious that posix timers never look up a process by a the
pid of a thread.

Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
kernel/time/posix-timers.c

index e08ce3f..2bdf08a 100644 (file)
@@ -433,11 +433,13 @@ static enum hrtimer_restart posix_timer_fn(struct hrtimer *timer)
 
 static struct pid *good_sigevent(sigevent_t * event)
 {
-       struct task_struct *rtn = current->group_leader;
+       struct pid *pid = task_tgid(current);
+       struct task_struct *rtn;
 
        switch (event->sigev_notify) {
        case SIGEV_SIGNAL | SIGEV_THREAD_ID:
-               rtn = find_task_by_vpid(event->sigev_notify_thread_id);
+               pid = find_vpid(event->sigev_notify_thread_id);
+               rtn = pid_task(pid, PIDTYPE_PID);
                if (!rtn || !same_thread_group(rtn, current))
                        return NULL;
                /* FALLTHRU */
@@ -447,7 +449,7 @@ static struct pid *good_sigevent(sigevent_t * event)
                        return NULL;
                /* FALLTHRU */
        case SIGEV_NONE:
-               return task_pid(rtn);
+               return pid;
        default:
                return NULL;
        }