Message ID | 20240709144403.544099-4-leitao@debian.org (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | netconsole: Fix potential race condition and improve code clarity | expand |
On Tue, 9 Jul 2024 07:44:01 -0700 Breno Leitao wrote: > Currently, netconsole cleans up the netpoll structure before disabling > the target. This approach can lead to race conditions, as message > senders (write_ext_msg() and write_msg()) check if the target is > enabled before using netpoll. > > This patch reverses the order of operations: > 1. Disable the target > 2. Clean up the netpoll structure > > This change eliminates the potential race condition, ensuring that > no messages are sent through a partially cleaned-up netpoll structure. I think this is a legit fix, please add a Fixes tag and resend for net.
diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 5ef680cf994a..9c09293b5258 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -973,6 +973,7 @@ static int netconsole_netdev_event(struct notifier_block *this, /* rtnl_lock already held * we might sleep in __netpoll_cleanup() */ + nt->enabled = false; spin_unlock_irqrestore(&target_list_lock, flags); __netpoll_cleanup(&nt->np); @@ -980,7 +981,6 @@ static int netconsole_netdev_event(struct notifier_block *this, spin_lock_irqsave(&target_list_lock, flags); netdev_put(nt->np.dev, &nt->np.dev_tracker); nt->np.dev = NULL; - nt->enabled = false; stopped = true; netconsole_target_put(nt); goto restart;
Currently, netconsole cleans up the netpoll structure before disabling the target. This approach can lead to race conditions, as message senders (write_ext_msg() and write_msg()) check if the target is enabled before using netpoll. This patch reverses the order of operations: 1. Disable the target 2. Clean up the netpoll structure This change eliminates the potential race condition, ensuring that no messages are sent through a partially cleaned-up netpoll structure. Signed-off-by: Breno Leitao <leitao@debian.org> --- drivers/net/netconsole.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)