From 6957b5fdf047c83fbcd3cf28e225829955a69a48 Mon Sep 17 00:00:00 2001 From: James Prestwood Date: Tue, 17 Jan 2023 10:03:42 -0800 Subject: [PATCH] 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. --- src/wiphy.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/wiphy.c b/src/wiphy.c index 9ca651f4..fcdc3ab8 100644 --- a/src/wiphy.c +++ b/src/wiphy.c @@ -2324,6 +2324,15 @@ static void wiphy_get_reg_domain(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); if (l_memeqzero(wiphy->permanent_addr, 6)) {