Commit 3cf28cd4 authored by Felix Maurer's avatar Felix Maurer Committed by Paolo Abeni

hsr: Handle failures in module init

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: f421436a ("net/hsr: Add support for the High-availability Seamless Redundancy protocol (HSRv0)")
Signed-off-by: default avatarFelix Maurer <fmaurer@redhat.com>
Reviewed-by: default avatarShigeru Yoshida <syoshida@redhat.com>
Reviewed-by: default avatarBreno Leitao <leitao@debian.org>
Link: https://lore.kernel.org/r/3ce097c15e3f7ace98fc7fd9bcbf299f092e63d1.1710504184.git.fmaurer@redhat.comSigned-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 1422f288
...@@ -148,14 +148,21 @@ static struct notifier_block hsr_nb = { ...@@ -148,14 +148,21 @@ static struct notifier_block hsr_nb = {
static int __init hsr_init(void) static int __init hsr_init(void)
{ {
int res; int err;
BUILD_BUG_ON(sizeof(struct hsr_tag) != HSR_HLEN); BUILD_BUG_ON(sizeof(struct hsr_tag) != HSR_HLEN);
register_netdevice_notifier(&hsr_nb); err = register_netdevice_notifier(&hsr_nb);
res = hsr_netlink_init(); 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) static void __exit hsr_exit(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment