]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: mac80211: avoid lockdep checking when removing deflink
authorBenjamin Berg <benjamin.berg@intel.com>
Mon, 19 Jun 2023 13:26:50 +0000 (16:26 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 28 Aug 2025 14:26:16 +0000 (16:26 +0200)
commit b8b80770b26c4591f20f1cde3328e5f1489c4488 upstream.

struct sta_info may be removed without holding sta_mtx if it has not
yet been inserted. To support this, only assert that the lock is held
for links other than the deflink.

This fixes lockdep issues that may be triggered in error cases.

Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230619161906.cdd81377dea0.If5a6734b4b85608a2275a09b4f99b5564d82997f@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Hanne-Lotta Mäenpää <hannelotta@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/mac80211/sta_info.c

index dd1864f6549f2352ce06feaa7f0fd38a7e9a9b1b..e9ae9209479441463a8f9dbff6697909b761f205 100644 (file)
@@ -357,8 +357,9 @@ static void sta_remove_link(struct sta_info *sta, unsigned int link_id,
        struct sta_link_alloc *alloc = NULL;
        struct link_sta_info *link_sta;
 
-       link_sta = rcu_dereference_protected(sta->link[link_id],
-                                            lockdep_is_held(&sta->local->sta_mtx));
+       link_sta = rcu_access_pointer(sta->link[link_id]);
+       if (link_sta != &sta->deflink)
+               lockdep_assert_held(&sta->local->sta_mtx);
 
        if (WARN_ON(!link_sta))
                return;