Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751685Ab3HTVda (ORCPT ); Tue, 20 Aug 2013 17:33:30 -0400 Received: from mx1.redhat.com ([209.132.183.28]:14047 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751205Ab3HTVd2 (ORCPT ); Tue, 20 Aug 2013 17:33:28 -0400 From: Richard Guy Briggs To: linux-audit@redhat.com, linux-kernel@vger.kernel.org, linux-security-module@vger.kernel.org Cc: Richard Guy Briggs , Eric Paris , Al Viro , Ingo Molnar , Peter Zijlstra , "Serge E. Hallyn" , John Johansen , James Morris , Andrew Morton , Oleg Nesterov , Kentaro Takeda , Tetsuo Handa , Greg Kroah-Hartman , Jiri Slaby Subject: [PATCH 03/12] pid: get ppid pid_t of task in init_pid_ns safely Date: Tue, 20 Aug 2013 17:31:55 -0400 Message-Id: In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1831 Lines: 66 Added the functions task_ppid() task_ppid_nr_ns() task_ppid_nr_init_ns() to safely abstract the lookup of the PPID (real_parent's tgid) of a process, including rcu locking, in any required pid namespace. This provides an alternative to sys_getppid(), which is relative to the child process' pid namespace. (informed by ebiederman's 6c621b7e) Cc: stable@vger.kernel.org Cc: Eric W. Biederman Signed-off-by: Richard Guy Briggs --- include/linux/sched.h | 23 +++++++++++++++++++++++ 1 files changed, 23 insertions(+), 0 deletions(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index d722490..ec04090 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1448,6 +1448,11 @@ static inline struct pid *task_session(struct task_struct *task) return task->group_leader->pids[PIDTYPE_SID].pid; } +static inline struct pid *task_ppid(struct task_struct *task) +{ + return task_tgid(rcu_dereference(current->real_parent)); +} + struct pid_namespace; /* @@ -1496,6 +1501,24 @@ static inline pid_t task_tgid_vnr(struct task_struct *tsk) } +static inline pid_t task_ppid_nr_ns(struct task_struct *tsk, + struct pid_namespace *ns) +{ + pid_t pid; + + rcu_read_lock(); + pid = pid_nr_ns(task_ppid(current), ns); + rcu_read_unlock(); + + return pid; +} + +static inline pid_t task_ppid_nr_init_ns(struct task_struct *tsk) +{ + return task_ppid_nr_ns(tsk, &init_pid_ns); +} + + static inline pid_t task_pgrp_nr_ns(struct task_struct *tsk, struct pid_namespace *ns) { -- 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/