From e8aaf6ba33c7d875523fcbae20fbd70ab57f9c48 Mon Sep 17 00:00:00 2001 From: Can Peng Date: Tue, 28 Jul 2026 11:20:45 +0800 Subject: [PATCH] netxen: unregister notifiers if PCI registration fails netxen_init_module() registers the netdevice and inetaddr notifiers before registering the PCI driver. If pci_register_driver() fails, the function returns the error directly and leaves both notifiers registered. That leaves notifier callbacks installed for a module that failed to load. Mirror the module exit path on this failure and unregister the notifiers before returning the error. Cc: stable+noautosel@kernel.org # untested fix to unlikely driver error path Signed-off-by: Can Peng Reviewed-by: Jacob Keller Link: https://patch.msgid.link/20260728032046.121631-2-pengcan@kylinos.cn Signed-off-by: Jakub Kicinski --- .../net/ethernet/qlogic/netxen/netxen_nic_main.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c index 5ee2bd9d6886..67d9bf69f8f2 100644 --- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c +++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c @@ -3447,13 +3447,24 @@ static struct pci_driver netxen_driver = { static int __init netxen_init_module(void) { + int ret; + printk(KERN_INFO "%s\n", netxen_nic_driver_string); #ifdef CONFIG_INET register_netdevice_notifier(&netxen_netdev_cb); register_inetaddr_notifier(&netxen_inetaddr_cb); #endif - return pci_register_driver(&netxen_driver); + + ret = pci_register_driver(&netxen_driver); +#ifdef CONFIG_INET + if (ret) { + unregister_inetaddr_notifier(&netxen_inetaddr_cb); + unregister_netdevice_notifier(&netxen_netdev_cb); + } +#endif + + return ret; } module_init(netxen_init_module);