ipv6: In fragmentation code, handle error returned from register_pernet_subsys.
authorPavel Emelyanov <xemul@openvz.org>
Mon, 19 May 2008 20:52:28 +0000 (13:52 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 19 May 2008 20:52:28 +0000 (13:52 -0700)
The error code is ignored now, but ipv6 is a module and one can
be loaded under memory pressure, so the error may occur (in theory).

Besides, I'm going to handle error returned from registering a
read-only part of the table, so ignoring this one, while handing
the other one would look strange.

(However, this possibility of error is rather small, so I'm not
 sure whether this is a candidate for current net tree).

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/reassembly.c

index 7e008de87117dafa8fdb4188b7db5a569c3d30b1..130d6f6b6a6ef4c1ad1e7a31ff9732136500bcce 100644 (file)
@@ -750,7 +750,9 @@ int __init ipv6_frag_init(void)
        if (ret)
                goto out;
 
-       register_pernet_subsys(&ip6_frags_ops);
+       ret = register_pernet_subsys(&ip6_frags_ops);
+       if (ret)
+               goto err_pernet;
 
        ip6_frags.hashfn = ip6_hashfn;
        ip6_frags.constructor = ip6_frag_init;
@@ -763,6 +765,10 @@ int __init ipv6_frag_init(void)
        inet_frags_init(&ip6_frags);
 out:
        return ret;
+
+err_pernet:
+       inet6_del_protocol(&frag_protocol, IPPROTO_FRAGMENT);
+       goto out;
 }
 
 void ipv6_frag_exit(void)