aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Lezcano <dlezcano@fr.ibm.com>2007-10-30 15:38:57 -0700
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-30 21:16:21 -0700
commit310928d9633b04866a47f07eb43c498b2d82ebcb (patch)
treee07712c96ef555b73d9d93b749056ddd053b86c8
parent[NET]: Fix free_netdev on register_netdev failure. (diff)
downloadlinux-dev-310928d9633b04866a47f07eb43c498b2d82ebcb.tar.xz
linux-dev-310928d9633b04866a47f07eb43c498b2d82ebcb.zip
[NETNS]: fix net released by rcu callback
When a network namespace reference is held by a network subsystem, and when this reference is decremented in a rcu update callback, we must ensure that there is no more outstanding rcu update before trying to free the network namespace. In the normal case, the rcu_barrier is called when the network namespace is exiting in the cleanup_net function. But when a network namespace creation fails, and the subsystems are undone (like the cleanup), the rcu_barrier is missing. This patch adds the missing rcu_barrier. Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/core/net_namespace.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
index 6f71db8c4428..662e6ea1cecf 100644
--- a/net/core/net_namespace.c
+++ b/net/core/net_namespace.c
@@ -112,6 +112,8 @@ out_undo:
if (ops->exit)
ops->exit(net);
}
+
+ rcu_barrier();
goto out;
}