mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-25 17:49:37 +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:
parent
d8ca993a1c
commit
6957b5fdf0
@ -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)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user