]> xenbits.xensource.com Git - people/aperard/linux.git/commitdiff
hsr: Handle failures in module init
authorFelix Maurer <fmaurer@redhat.com>
Fri, 15 Mar 2024 12:04:52 +0000 (13:04 +0100)
committerSasha Levin <sashal@kernel.org>
Tue, 26 Mar 2024 22:21:00 +0000 (18:21 -0400)
[ Upstream commit 3cf28cd492308e5f63ed00b29ea03ca016264376 ]

A failure during registration of the netdev notifier was not handled at
all. A failure during netlink initialization did not unregister the netdev
notifier.

Handle failures of netdev notifier registration and netlink initialization.
Both functions should only return negative values on failure and thereby
lead to the hsr module not being loaded.

Fixes: f421436a591d ("net/hsr: Add support for the High-availability Seamless Redundancy protocol (HSRv0)")
Signed-off-by: Felix Maurer <fmaurer@redhat.com>
Reviewed-by: Shigeru Yoshida <syoshida@redhat.com>
Reviewed-by: Breno Leitao <leitao@debian.org>
Link: https://lore.kernel.org/r/3ce097c15e3f7ace98fc7fd9bcbf299f092e63d1.1710504184.git.fmaurer@redhat.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/hsr/hsr_main.c

index b099c315015096f3637f4770ee9a6553baac2637..257b50124cee5e4d8b4f69b4c1d1287f13270d7f 100644 (file)
@@ -148,14 +148,21 @@ static struct notifier_block hsr_nb = {
 
 static int __init hsr_init(void)
 {
-       int res;
+       int err;
 
        BUILD_BUG_ON(sizeof(struct hsr_tag) != HSR_HLEN);
 
-       register_netdevice_notifier(&hsr_nb);
-       res = hsr_netlink_init();
+       err = register_netdevice_notifier(&hsr_nb);
+       if (err)
+               return err;
+
+       err = hsr_netlink_init();
+       if (err) {
+               unregister_netdevice_notifier(&hsr_nb);
+               return err;
+       }
 
-       return res;
+       return 0;
 }
 
 static void __exit hsr_exit(void)