]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
rtnetlink: Return int from rtnl_af_register().
authorKuniyuki Iwashima <kuniyu@amazon.com>
Wed, 16 Oct 2024 18:53:56 +0000 (11:53 -0700)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 22 Oct 2024 09:02:05 +0000 (11:02 +0200)
The next patch will add init_srcu_struct() in rtnl_af_register(),
then we need to handle its error.

Let's add the error handling in advance to make the following
patch cleaner.

Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Reviewed-by: Matt Johnston <matt@codeconstruct.com.au>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
include/net/rtnetlink.h
net/bridge/br_netlink.c
net/core/rtnetlink.c
net/ipv4/devinet.c
net/ipv6/addrconf.c
net/mctp/device.c
net/mpls/af_mpls.c

index 1a6aa5ca74f3029e1b36b2033982d6fe59ec3172..969138ae2f4b49cf6d2c36edef05f806715cf6c1 100644 (file)
@@ -204,7 +204,7 @@ struct rtnl_af_ops {
        size_t                  (*get_stats_af_size)(const struct net_device *dev);
 };
 
-void rtnl_af_register(struct rtnl_af_ops *ops);
+int rtnl_af_register(struct rtnl_af_ops *ops);
 void rtnl_af_unregister(struct rtnl_af_ops *ops);
 
 struct net *rtnl_link_get_net(struct net *src_net, struct nlattr *tb[]);
index 6b97ae47f85524a9ab1362114df0a34cdcd3f270..3e0f47203f2a1a74a253b4d5cb7a11939145160d 100644 (file)
@@ -1924,7 +1924,9 @@ int __init br_netlink_init(void)
        if (err)
                goto out;
 
-       rtnl_af_register(&br_af_ops);
+       err = rtnl_af_register(&br_af_ops);
+       if (err)
+               goto out_vlan;
 
        err = rtnl_link_register(&br_link_ops);
        if (err)
@@ -1934,6 +1936,8 @@ int __init br_netlink_init(void)
 
 out_af:
        rtnl_af_unregister(&br_af_ops);
+out_vlan:
+       br_vlan_rtnl_uninit();
 out:
        return err;
 }
index 445e6ffed75e776fb14e6f335289844f2a511424..70b663aca2091c6a1ea94cfbde21bf55e0b05c12 100644 (file)
@@ -686,11 +686,13 @@ static const struct rtnl_af_ops *rtnl_af_lookup(const int family)
  *
  * Returns 0 on success or a negative error code.
  */
-void rtnl_af_register(struct rtnl_af_ops *ops)
+int rtnl_af_register(struct rtnl_af_ops *ops)
 {
        rtnl_lock();
        list_add_tail_rcu(&ops->list, &rtnl_af_ops);
        rtnl_unlock();
+
+       return 0;
 }
 EXPORT_SYMBOL_GPL(rtnl_af_register);
 
index ec29ead83e741b30bd74e86aed7b4d771013fe02..0ff9c0abfaa0e7dd12eb22ac8622d86a59103df3 100644 (file)
@@ -2827,7 +2827,8 @@ void __init devinet_init(void)
        register_pernet_subsys(&devinet_ops);
        register_netdevice_notifier(&ip_netdev_notifier);
 
-       rtnl_af_register(&inet_af_ops);
+       if (rtnl_af_register(&inet_af_ops))
+               panic("Unable to register inet_af_ops\n");
 
        rtnl_register_many(devinet_rtnl_msg_handlers);
 }
index ac8645ad2537fe9265eff3ceb7ca27af27099c23..d0a99710d65de7afe5a5db3c2dc8bf6346dabbb3 100644 (file)
@@ -7468,7 +7468,9 @@ int __init addrconf_init(void)
 
        addrconf_verify(&init_net);
 
-       rtnl_af_register(&inet6_ops);
+       err = rtnl_af_register(&inet6_ops);
+       if (err)
+               goto erraf;
 
        err = rtnl_register_many(addrconf_rtnl_msg_handlers);
        if (err)
@@ -7482,6 +7484,7 @@ int __init addrconf_init(void)
 errout:
        rtnl_unregister_all(PF_INET6);
        rtnl_af_unregister(&inet6_ops);
+erraf:
        unregister_netdevice_notifier(&ipv6_dev_notf);
 errlo:
        destroy_workqueue(addrconf_wq);
index 85cc5f31f1e7c0a0c3f51c5e924d9424dec27b5a..3d75b919995d87a49b3b9a6ff5afbf6fd09ade28 100644 (file)
@@ -535,14 +535,20 @@ int __init mctp_device_init(void)
        int err;
 
        register_netdevice_notifier(&mctp_dev_nb);
-       rtnl_af_register(&mctp_af_ops);
+
+       err = rtnl_af_register(&mctp_af_ops);
+       if (err)
+               goto err_notifier;
 
        err = rtnl_register_many(mctp_device_rtnl_msg_handlers);
-       if (err) {
-               rtnl_af_unregister(&mctp_af_ops);
-               unregister_netdevice_notifier(&mctp_dev_nb);
-       }
+       if (err)
+               goto err_af;
 
+       return 0;
+err_af:
+       rtnl_af_unregister(&mctp_af_ops);
+err_notifier:
+       unregister_netdevice_notifier(&mctp_dev_nb);
        return err;
 }
 
index a0573847bc555ddf3ff0b38c181ff1e368c3010b..1f63b32d76d67873b731139e45c4c1dfcb4f2e17 100644 (file)
@@ -2753,7 +2753,9 @@ static int __init mpls_init(void)
 
        dev_add_pack(&mpls_packet_type);
 
-       rtnl_af_register(&mpls_af_ops);
+       err = rtnl_af_register(&mpls_af_ops);
+       if (err)
+               goto out_unregister_dev_type;
 
        err = rtnl_register_many(mpls_rtnl_msg_handlers);
        if (err)
@@ -2773,6 +2775,7 @@ out_unregister_rtnl:
        rtnl_unregister_many(mpls_rtnl_msg_handlers);
 out_unregister_rtnl_af:
        rtnl_af_unregister(&mpls_af_ops);
+out_unregister_dev_type:
        dev_remove_pack(&mpls_packet_type);
 out_unregister_pernet:
        unregister_pernet_subsys(&mpls_net_ops);