ipv4: nexthop: handle errors in nexthop_init()

nexthop_init() ignores errors from register_pernet_subsys() and
register_netdevice_notifier(), so a partial initialization can appear
successful.

Check those steps and unwind prior registrations on failure.

Do not check rtnl_register_many(): for built-in code it panics on
failure, so the call cannot return an error to nexthop_init().

Cc: stable+noautosel@kernel.org # untested fix to unlikely error path
Signed-off-by: Minhong He <heminhong@kylinos.cn>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Link: https://patch.msgid.link/20260731025249.80026-1-heminhong@kylinos.cn
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Minhong He
2026-07-31 10:52:49 +08:00
committed by Jakub Kicinski
parent 30ce0cb576
commit c0fd47726c

View File

@@ -4219,12 +4219,22 @@ static const struct rtnl_msg_handler nexthop_rtnl_msg_handlers[] __initconst = {
static int __init nexthop_init(void)
{
register_pernet_subsys(&nexthop_net_ops);
int err;
register_netdevice_notifier(&nh_netdev_notifier);
err = register_pernet_subsys(&nexthop_net_ops);
if (err)
return err;
err = register_netdevice_notifier(&nh_netdev_notifier);
if (err)
goto err_unregister_pernet;
rtnl_register_many(nexthop_rtnl_msg_handlers);
return 0;
err_unregister_pernet:
unregister_pernet_subsys(&nexthop_net_ops);
return err;
}
subsys_initcall(nexthop_init);