From 93192b0a1ac7863d43457221f956bff35c92d210 Mon Sep 17 00:00:00 2001 From: Oleg Nesterov Date: Wed, 30 Apr 2008 00:54:28 -0700 Subject: [PATCH] --- yaml --- r: 95253 b: refs/heads/master c: 1dd768c0815334d2319d6377f0750ace075b6142 h: refs/heads/master i: 95251: 42a91b2a35f04e63e6fedb81f00c566597f8c9dc v: v3 --- [refs] | 2 +- trunk/kernel/sys.c | 33 ++++++++++++++++++++------------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/[refs] b/[refs] index 8a8246bda11b..2f4ccdc31389 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7d8da0962eaee30b4a380ded177349bfbdd6ac46 +refs/heads/master: 1dd768c0815334d2319d6377f0750ace075b6142 diff --git a/trunk/kernel/sys.c b/trunk/kernel/sys.c index 5d0b44cd435c..ddd28e261f3a 100644 --- a/trunk/kernel/sys.c +++ b/trunk/kernel/sys.c @@ -1022,23 +1022,30 @@ asmlinkage long sys_getpgrp(void) asmlinkage long sys_getsid(pid_t pid) { + struct task_struct *p; + struct pid *sid; + int retval; + + rcu_read_lock(); if (!pid) - return task_session_vnr(current); + sid = task_session(current); else { - int retval; - struct task_struct *p; - - rcu_read_lock(); - p = find_task_by_vpid(pid); retval = -ESRCH; - if (p) { - retval = security_task_getsid(p); - if (!retval) - retval = task_session_vnr(p); - } - rcu_read_unlock(); - return retval; + p = find_task_by_vpid(pid); + if (!p) + goto out; + sid = task_session(p); + if (!sid) + goto out; + + retval = security_task_getsid(p); + if (retval) + goto out; } + retval = pid_vnr(sid); +out: + rcu_read_unlock(); + return retval; } asmlinkage long sys_setsid(void)