From 3798ea2c88da23decf09cbd2b30bf0c1a14b564b Mon Sep 17 00:00:00 2001 From: Guillaume Chazarain Date: Wed, 31 Jan 2007 23:48:14 -0800 Subject: [PATCH] --- yaml --- r: 46030 b: refs/heads/master c: 7d8952440f4090522b740257f1c6b2cf96413969 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/proc/base.c | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 6aacfcd64da9..a54d7132f7d7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 432bd6cbf9f016f5480153b1cdfbd046f8d4fb1e +refs/heads/master: 7d8952440f4090522b740257f1c6b2cf96413969 diff --git a/trunk/fs/proc/base.c b/trunk/fs/proc/base.c index ff7a66850602..1a979ea3b379 100644 --- a/trunk/fs/proc/base.c +++ b/trunk/fs/proc/base.c @@ -2328,13 +2328,23 @@ static int proc_task_readdir(struct file * filp, void * dirent, filldir_t filldi { struct dentry *dentry = filp->f_path.dentry; struct inode *inode = dentry->d_inode; - struct task_struct *leader = get_proc_task(inode); + struct task_struct *leader = NULL; struct task_struct *task; int retval = -ENOENT; ino_t ino; int tid; unsigned long pos = filp->f_pos; /* avoiding "long long" filp->f_pos */ + task = get_proc_task(inode); + if (!task) + goto out_no_task; + rcu_read_lock(); + if (pid_alive(task)) { + leader = task->group_leader; + get_task_struct(leader); + } + rcu_read_unlock(); + put_task_struct(task); if (!leader) goto out_no_task; retval = 0;