summaryrefslogtreecommitdiff
path: root/fs/proc
diff options
context:
space:
mode:
authorPravin B Shelar <pshelar@nicira.com>2012-03-23 15:02:55 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-04-02 09:27:18 -0700
commita714cb9d0897be6e18fbc801a908cab483358946 (patch)
tree821557e9853db70f598451270efae2bc98699410 /fs/proc
parent6986f38042842b6c43dd10c36311db66c2865367 (diff)
downloadlwn-a714cb9d0897be6e18fbc801a908cab483358946.tar.gz
lwn-a714cb9d0897be6e18fbc801a908cab483358946.zip
proc-ns: use d_set_d_op() API to set dentry ops in proc_ns_instantiate().
commit 1b26c9b334044cff6d1d2698f2be41bc7d9a0864 upstream. The namespace cleanup path leaks a dentry which holds a reference count on a network namespace. Keeping that network namespace from being freed when the last user goes away. Leaving things like vlan devices in the leaked network namespace. If you use ip netns add for much real work this problem becomes apparent pretty quickly. It light testing the problem hides because frequently you simply don't notice the leak. Use d_set_d_op() so that DCACHE_OP_* flags are set correctly. This issue exists back to 3.0. Acked-by: "Eric W. Biederman" <ebiederm@xmission.com> Reported-by: Justin Pettit <jpettit@nicira.com> Signed-off-by: Pravin B Shelar <pshelar@nicira.com> Signed-off-by: Jesse Gross <jesse@nicira.com> Cc: David Miller <davem@davemloft.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs/proc')
-rw-r--r--fs/proc/namespaces.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/proc/namespaces.c b/fs/proc/namespaces.c
index be177f702acb..d6c078ea1489 100644
--- a/fs/proc/namespaces.c
+++ b/fs/proc/namespaces.c
@@ -54,7 +54,7 @@ static struct dentry *proc_ns_instantiate(struct inode *dir,
ei->ns_ops = ns_ops;
ei->ns = ns;
- dentry->d_op = &pid_dentry_operations;
+ d_set_d_op(dentry, &pid_dentry_operations);
d_add(dentry, inode);
/* Close the race of the process dying before we return the dentry */
if (pid_revalidate(dentry, NULL))