diff options
Diffstat (limited to 'net/wireless/wext-compat.c')
| -rw-r--r-- | net/wireless/wext-compat.c | 14 | 
1 files changed, 10 insertions, 4 deletions
diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c index 167f7025ac98..06943d9c9835 100644 --- a/net/wireless/wext-compat.c +++ b/net/wireless/wext-compat.c @@ -1278,12 +1278,16 @@ static int cfg80211_wext_giwrate(struct net_device *dev,  	if (err)  		return err; -	if (!(sinfo.filled & BIT_ULL(NL80211_STA_INFO_TX_BITRATE))) -		return -EOPNOTSUPP; +	if (!(sinfo.filled & BIT_ULL(NL80211_STA_INFO_TX_BITRATE))) { +		err = -EOPNOTSUPP; +		goto free; +	}  	rate->value = 100000 * cfg80211_calculate_bitrate(&sinfo.txrate); -	return 0; +free: +	cfg80211_sinfo_release_content(&sinfo); +	return err;  }  /* Get wireless statistics.  Called by /proc/net/wireless and by SIOCGIWSTATS */ @@ -1293,7 +1297,7 @@ static struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev)  	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);  	/* we are under RTNL - globally locked - so can use static structs */  	static struct iw_statistics wstats; -	static struct station_info sinfo; +	static struct station_info sinfo = {};  	u8 bssid[ETH_ALEN];  	if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION) @@ -1352,6 +1356,8 @@ static struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev)  	if (sinfo.filled & BIT_ULL(NL80211_STA_INFO_TX_FAILED))  		wstats.discard.retries = sinfo.tx_failed; +	cfg80211_sinfo_release_content(&sinfo); +  	return &wstats;  }  | 
