OSDN Git Service

posix-timers: Correct sanity check in posix_cpu_nsleep
authorEric W. Biederman <ebiederm@xmission.com>
Thu, 13 Apr 2017 15:32:16 +0000 (10:32 -0500)
committerEric W. Biederman <ebiederm@xmission.com>
Mon, 17 Apr 2017 04:42:50 +0000 (23:42 -0500)
CPUCLOCK_PID(which_clock) is a pid value from userspace so compare it
against task_pid_vnr, not current->pid.  As task_pid_vnr is in the tasks
pid value in the tasks pid namespace, and current->pid is in the
initial pid namespace.

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

index 4513ad1..37f9bb8 100644 (file)
@@ -1312,7 +1312,7 @@ static int posix_cpu_nsleep(const clockid_t which_clock, int flags,
         */
        if (CPUCLOCK_PERTHREAD(which_clock) &&
            (CPUCLOCK_PID(which_clock) == 0 ||
-            CPUCLOCK_PID(which_clock) == current->pid))
+            CPUCLOCK_PID(which_clock) == task_pid_vnr(current)))
                return -EINVAL;
 
        error = do_cpu_nanosleep(which_clock, flags, rqtp, &it);