Commit 1b26c9b3 authored by Pravin B Shelar's avatar Pravin B Shelar Committed by Linus Torvalds

proc-ns: use d_set_d_op() API to set dentry ops in proc_ns_instantiate().

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: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
Reported-by: default avatarJustin Pettit <jpettit@nicira.com>
Signed-off-by: default avatarPravin B Shelar <pshelar@nicira.com>
Signed-off-by: default avatarJesse Gross <jesse@nicira.com>
Cc: David Miller <davem@davemloft.net>
Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent bda7bad6
...@@ -53,7 +53,7 @@ static struct dentry *proc_ns_instantiate(struct inode *dir, ...@@ -53,7 +53,7 @@ static struct dentry *proc_ns_instantiate(struct inode *dir,
ei->ns_ops = ns_ops; ei->ns_ops = ns_ops;
ei->ns = ns; ei->ns = ns;
dentry->d_op = &pid_dentry_operations; d_set_d_op(dentry, &pid_dentry_operations);
d_add(dentry, inode); d_add(dentry, inode);
/* Close the race of the process dying before we return the dentry */ /* Close the race of the process dying before we return the dentry */
if (pid_revalidate(dentry, NULL)) if (pid_revalidate(dentry, NULL))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment