]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: mac80211: collect station statistics earlier when disconnect
authorBaochen Qiang <baochen.qiang@oss.qualcomm.com>
Mon, 22 Dec 2025 02:29:07 +0000 (10:29 +0800)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 8 Jan 2026 12:33:11 +0000 (13:33 +0100)
In __sta_info_destroy_part2(), station statistics are requested after the
IEEE80211_STA_NONE -> IEEE80211_STA_NOTEXIST transition. This is
problematic because the driver may be unable to handle the request due to
the STA being in the NOTEXIST state (i.e. if the driver destroys the
underlying data when transitioning to NOTEXIST).

Move the statistics collection to before the state transition to avoid
this issue.

Signed-off-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
Link: https://patch.msgid.link/20251222-mac80211-move-station-stats-collection-earlier-v1-1-12cd4e42c633@oss.qualcomm.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/sta_info.c

index f4d3b67fda062d1773f0d51c44b3495aba47bea0..1a995bc301b19a7108da972b8b36c84d5f05184a 100644 (file)
@@ -1533,6 +1533,10 @@ static void __sta_info_destroy_part2(struct sta_info *sta, bool recalc)
                }
        }
 
+       sinfo = kzalloc(sizeof(*sinfo), GFP_KERNEL);
+       if (sinfo)
+               sta_set_sinfo(sta, sinfo, true);
+
        if (sta->uploaded) {
                ret = drv_sta_state(local, sdata, sta, IEEE80211_STA_NONE,
                                    IEEE80211_STA_NOTEXIST);
@@ -1541,9 +1545,6 @@ static void __sta_info_destroy_part2(struct sta_info *sta, bool recalc)
 
        sta_dbg(sdata, "Removed STA %pM\n", sta->sta.addr);
 
-       sinfo = kzalloc(sizeof(*sinfo), GFP_KERNEL);
-       if (sinfo)
-               sta_set_sinfo(sta, sinfo, true);
        cfg80211_del_sta_sinfo(sdata->dev, sta->sta.addr, sinfo, GFP_KERNEL);
        kfree(sinfo);