wifi: mac80211: ethtool: hold wiphy mutex
authorJohannes Berg <johannes.berg@intel.com>
Mon, 28 Aug 2023 11:59:57 +0000 (13:59 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 11 Sep 2023 09:27:21 +0000 (11:27 +0200)
We should hold the wiphy mutex here since we're going
to call the driver and want to remove the sta_mtx.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/ethtool.c

index a3830d925cc29ddfed3836d21aef74bebb4f542b..c53208321c8fddf8dd99d9e84f290cb035b432f8 100644 (file)
@@ -5,7 +5,7 @@
  * Copied from cfg.c - originally
  * Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
  * Copyright 2014      Intel Corporation (Author: Johannes Berg)
- * Copyright (C) 2018, 2022 Intel Corporation
+ * Copyright (C) 2018, 2022-2023 Intel Corporation
  */
 #include <linux/types.h>
 #include <net/cfg80211.h>
@@ -102,6 +102,7 @@ static void ieee80211_get_stats(struct net_device *dev,
         * network device.
         */
 
+       wiphy_lock(local->hw.wiphy);
        mutex_lock(&local->sta_mtx);
 
        if (sdata->vif.type == NL80211_IFTYPE_STATION) {
@@ -200,10 +201,13 @@ do_survey:
 
        mutex_unlock(&local->sta_mtx);
 
-       if (WARN_ON(i != STA_STATS_LEN))
+       if (WARN_ON(i != STA_STATS_LEN)) {
+               wiphy_unlock(local->hw.wiphy);
                return;
+       }
 
        drv_get_et_stats(sdata, stats, &(data[STA_STATS_LEN]));
+       wiphy_unlock(local->hw.wiphy);
 }
 
 static void ieee80211_get_strings(struct net_device *dev, u32 sset, u8 *data)