From ea930ca1c4d51e75c64699ebc51967bdc1519a71 Mon Sep 17 00:00:00 2001 From: Al Viro Date: Thu, 14 Jan 2010 01:03:28 -0500 Subject: [PATCH] --- yaml --- r: 180707 b: refs/heads/master c: 7fee4868be91e71a3ee8e57289ebf5e10a12297e h: refs/heads/master i: 180705: f9050e496b3863f15a2646714f6fb4c1caba4b65 180703: f50bf19aa927b129fb8b63f1f59801521518f2ae v: v3 --- [refs] | 2 +- trunk/fs/proc/base.c | 24 +++++++++++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index cf21c3e201ba..c05f6d739725 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ac278a9c505092dd82077a2446af8f9fc0d9c095 +refs/heads/master: 7fee4868be91e71a3ee8e57289ebf5e10a12297e diff --git a/trunk/fs/proc/base.c b/trunk/fs/proc/base.c index e42bbd843ed1..58324c299165 100644 --- a/trunk/fs/proc/base.c +++ b/trunk/fs/proc/base.c @@ -2369,16 +2369,30 @@ static void *proc_self_follow_link(struct dentry *dentry, struct nameidata *nd) { struct pid_namespace *ns = dentry->d_sb->s_fs_info; pid_t tgid = task_tgid_nr_ns(current, ns); - char tmp[PROC_NUMBUF]; - if (!tgid) - return ERR_PTR(-ENOENT); - sprintf(tmp, "%d", task_tgid_nr_ns(current, ns)); - return ERR_PTR(vfs_follow_link(nd,tmp)); + char *name = ERR_PTR(-ENOENT); + if (tgid) { + name = __getname(); + if (!name) + name = ERR_PTR(-ENOMEM); + else + sprintf(name, "%d", tgid); + } + nd_set_link(nd, name); + return NULL; +} + +static void proc_self_put_link(struct dentry *dentry, struct nameidata *nd, + void *cookie) +{ + char *s = nd_get_link(nd); + if (!IS_ERR(s)) + __putname(s); } static const struct inode_operations proc_self_inode_operations = { .readlink = proc_self_readlink, .follow_link = proc_self_follow_link, + .put_link = proc_self_put_link, }; /*