]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/ipv6/route.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/penberg...
[mv-sheeva.git] / net / ipv6 / route.c
index 6293cb91ed1d49aca560c255c04ea545a1247026..a493ad9b891475bdd7cd0c11b18688d8fe306f31 100644 (file)
@@ -150,7 +150,7 @@ static struct rt6_info ip6_null_entry_template = {
 static int ip6_pkt_prohibit(struct sk_buff *skb);
 static int ip6_pkt_prohibit_out(struct sk_buff *skb);
 
-struct rt6_info ip6_prohibit_entry_template = {
+static struct rt6_info ip6_prohibit_entry_template = {
        .u = {
                .dst = {
                        .__refcnt       = ATOMIC_INIT(1),
@@ -2614,15 +2614,14 @@ struct ctl_table *ipv6_route_sysctl_init(struct net *net)
 
 static int ip6_route_net_init(struct net *net)
 {
-       int ret = 0;
+       int ret = -ENOMEM;
 
-       ret = -ENOMEM;
        net->ipv6.ip6_dst_ops = kmemdup(&ip6_dst_ops_template,
                                        sizeof(*net->ipv6.ip6_dst_ops),
                                        GFP_KERNEL);
        if (!net->ipv6.ip6_dst_ops)
                goto out;
-       net->ipv6.ip6_dst_ops->dst_net = net;
+       net->ipv6.ip6_dst_ops->dst_net = hold_net(net);
 
        net->ipv6.ip6_null_entry = kmemdup(&ip6_null_entry_template,
                                           sizeof(*net->ipv6.ip6_null_entry),
@@ -2669,6 +2668,7 @@ out:
        return ret;
 
 out_ip6_dst_ops:
+       release_net(net->ipv6.ip6_dst_ops->dst_net);
        kfree(net->ipv6.ip6_dst_ops);
        goto out;
 }
@@ -2684,6 +2684,7 @@ static void ip6_route_net_exit(struct net *net)
        kfree(net->ipv6.ip6_prohibit_entry);
        kfree(net->ipv6.ip6_blk_hole_entry);
 #endif
+       release_net(net->ipv6.ip6_dst_ops->dst_net);
        kfree(net->ipv6.ip6_dst_ops);
 }