Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

net: core: failover: enforce mandatory ops and clean up redundant checks

The failover framework requires 'ops' to be functional. Currently,
failover_register() allows an instance to be registered with NULL
ops, which leads to inconsistent NULL checks and potential NULL
pointer dereferences in the slave registration paths.

Harden the entry point by requiring non-NULL ops in
failover_register(). This ensures the 'fops' pointer is guaranteed
to be valid for any successfully registered failover instance.
Consequently, remove the now redundant NULL checks for 'fops'
throughout the module to simplify the logic.

Signed-off-by: Zeeshan Ahmad <zeeshanahmad022019@gmail.com>
Link: https://patch.msgid.link/20260302064317.9964-1-zeeshanahmad022019@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Zeeshan Ahmad and committed by
Jakub Kicinski
d6ca1995 dfa77c0d

+7 -7
+7 -7
net/core/failover.c
··· 59 59 if (!failover_dev) 60 60 goto done; 61 61 62 - if (fops && fops->slave_pre_register && 62 + if (fops->slave_pre_register && 63 63 fops->slave_pre_register(slave_dev, failover_dev)) 64 64 goto done; 65 65 ··· 82 82 83 83 slave_dev->priv_flags |= (IFF_FAILOVER_SLAVE | IFF_NO_ADDRCONF); 84 84 85 - if (fops && fops->slave_register && 85 + if (fops->slave_register && 86 86 !fops->slave_register(slave_dev, failover_dev)) 87 87 return NOTIFY_OK; 88 88 ··· 115 115 if (!failover_dev) 116 116 goto done; 117 117 118 - if (fops && fops->slave_pre_unregister && 118 + if (fops->slave_pre_unregister && 119 119 fops->slave_pre_unregister(slave_dev, failover_dev)) 120 120 goto done; 121 121 ··· 123 123 netdev_upper_dev_unlink(slave_dev, failover_dev); 124 124 slave_dev->priv_flags &= ~(IFF_FAILOVER_SLAVE | IFF_NO_ADDRCONF); 125 125 126 - if (fops && fops->slave_unregister && 126 + if (fops->slave_unregister && 127 127 !fops->slave_unregister(slave_dev, failover_dev)) 128 128 return NOTIFY_OK; 129 129 ··· 149 149 if (!netif_running(failover_dev)) 150 150 goto done; 151 151 152 - if (fops && fops->slave_link_change && 152 + if (fops->slave_link_change && 153 153 !fops->slave_link_change(slave_dev, failover_dev)) 154 154 return NOTIFY_OK; 155 155 ··· 174 174 if (!netif_running(failover_dev)) 175 175 goto done; 176 176 177 - if (fops && fops->slave_name_change && 177 + if (fops->slave_name_change && 178 178 !fops->slave_name_change(slave_dev, failover_dev)) 179 179 return NOTIFY_OK; 180 180 ··· 244 244 { 245 245 struct failover *failover; 246 246 247 - if (dev->type != ARPHRD_ETHER) 247 + if (dev->type != ARPHRD_ETHER || !ops) 248 248 return ERR_PTR(-EINVAL); 249 249 250 250 failover = kzalloc_obj(*failover);