aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/pid_namespace.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/kernel/pid_namespace.c b/kernel/pid_namespace.c
index df9e8e9e0be7..eef2ce968636 100644
--- a/kernel/pid_namespace.c
+++ b/kernel/pid_namespace.c
@@ -151,8 +151,12 @@ out:
151 151
152static void delayed_free_pidns(struct rcu_head *p) 152static void delayed_free_pidns(struct rcu_head *p)
153{ 153{
154 kmem_cache_free(pid_ns_cachep, 154 struct pid_namespace *ns = container_of(p, struct pid_namespace, rcu);
155 container_of(p, struct pid_namespace, rcu)); 155
156 dec_pid_namespaces(ns->ucounts);
157 put_user_ns(ns->user_ns);
158
159 kmem_cache_free(pid_ns_cachep, ns);
156} 160}
157 161
158static void destroy_pid_namespace(struct pid_namespace *ns) 162static void destroy_pid_namespace(struct pid_namespace *ns)
@@ -162,8 +166,6 @@ static void destroy_pid_namespace(struct pid_namespace *ns)
162 ns_free_inum(&ns->ns); 166 ns_free_inum(&ns->ns);
163 for (i = 0; i < PIDMAP_ENTRIES; i++) 167 for (i = 0; i < PIDMAP_ENTRIES; i++)
164 kfree(ns->pidmap[i].page); 168 kfree(ns->pidmap[i].page);
165 dec_pid_namespaces(ns->ucounts);
166 put_user_ns(ns->user_ns);
167 call_rcu(&ns->rcu, delayed_free_pidns); 169 call_rcu(&ns->rcu, delayed_free_pidns);
168} 170}
169 171