| From 1b26c9b334044cff6d1d2698f2be41bc7d9a0864 Mon Sep 17 00:00:00 2001 |
| From: Pravin B Shelar <pshelar@nicira.com> |
| Date: Fri, 23 Mar 2012 15:02:55 -0700 |
| Subject: proc-ns: use d_set_d_op() API to set dentry ops in proc_ns_instantiate(). |
| |
| From: Pravin B Shelar <pshelar@nicira.com> |
| |
| 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> |
| |
| --- |
| fs/proc/namespaces.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/fs/proc/namespaces.c |
| +++ b/fs/proc/namespaces.c |
| @@ -54,7 +54,7 @@ static struct dentry *proc_ns_instantiat |
| 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)) |