3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-11-25 09:39:25 +01:00

wiphy: prevent multiple wiphy registrations

With really badly timed events a wiphy can be registered twice. This
happens when IWD starts and requests a wiphy dump. Immediately after
a NEW_WIPHY event comes in (presumably when the driver loads) which
starts another dump. The NEW_WIPHY event can't simply be ignored
since it could be a hotplug (e.g. USB card) so to fix this we can
instead just prevent it from being registered.

This does mean both dumps will happen but the information will just
be added to the same wiphy object.
This commit is contained in:
James Prestwood 2023-01-17 10:03:42 -08:00 committed by Denis Kenzior
parent d8ca993a1c
commit 6957b5fdf0

View File

@ -2324,6 +2324,15 @@ static void wiphy_get_reg_domain(struct wiphy *wiphy)
void wiphy_create_complete(struct wiphy *wiphy) void wiphy_create_complete(struct wiphy *wiphy)
{ {
/*
* With really bad timing two wiphy dumps can occur (initial and a
* NEW_WIPHY event) and actually register twice. Ignoring/preventing the
* second dump is problematic since it _could_ be a legitimate event so
* instead just prevent it from registering twice.
*/
if (wiphy->registered)
return;
wiphy_register(wiphy); wiphy_register(wiphy);
if (l_memeqzero(wiphy->permanent_addr, 6)) { if (l_memeqzero(wiphy->permanent_addr, 6)) {