mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 18:21:24 +02:00
Some more fixes:
- mt76 gets three almost identical new length checks
- cw1200 & ti: locking fixes
- mac80211 has a fix for the recent EML frame handling
- rsi driver no longer oddly responds to config, which
had triggered a warning in mac80211
- ath12k has two fixes for station statistics handling
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEpeA8sTs3M8SN2hR410qiO8sPaAAFAmmoFjoACgkQ10qiO8sP
aACNYA/9Fqvno+pZXvGHo9yIsKgW1WfOVADhXkcG1rKDLcUS7MAzIXx3eru4Uteq
wXD4rX07M2E0qa2TGmemCJSZPlYdNWkSn3EXGfn2TDmUH0u991kVa7wHMbUal4XQ
lOlQns6c5B5r1wA7Cg1MTzDqplkIQacJ4T4Hf+v7n7twz9uKmfBYpR1vNek60Cx3
smCrdMTbsMO1YBcMjoIoMYs7sPWk/2MFiCS0YxRlOik1bmZnwf34Y9p+sOSvZxRV
Ydt/9pBlwA2eFzdKPdoSZmMtfs+OdAiICqSC6CSI1KylgLOwnEl/UPN/bUxszGx1
NHjp2+8/yfOpm+EXwqWjeZ46lbw6YkkjWmxraNqRSCvQpPdc67RbqN405fFjonaR
YMh6UuBHMlTGAbCLXwSkL5TKBD3EHq4PXnc6aFoBpPgaRxppGuT+Lx8PQny5fMOq
GbOo3XUyB1Dc6B1A+xCN95DmPdg223RBR/qJCMHRkzaKm1ExO5hyYFQlZcH4bFHJ
9K2bTzZ7/w5UNYEiqX1yQ7btIlqf/gdeBANjLHNdqlsJ8i3GKm6TZV1rMnvt9MWC
21yYZ/Bwf4SzLgCH6Ds1RGEJjXusYnea/XJKeSPE0xqicFrXDqKGrmYIDFbntFLa
mAqWmTqTVFl697h8PFoi47YqKr/5B+Ew3+1ZAGESc1RYWq+GDjI=
=/SxR
-----END PGP SIGNATURE-----
Merge tag 'wireless-2026-03-04' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless
Johannes Berg says:
====================
Some more fixes:
- mt76 gets three almost identical new length checks
- cw1200 & ti: locking fixes
- mac80211 has a fix for the recent EML frame handling
- rsi driver no longer oddly responds to config, which
had triggered a warning in mac80211
- ath12k has two fixes for station statistics handling
* tag 'wireless-2026-03-04' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless:
wifi: mt76: Fix possible oob access in mt76_connac2_mac_write_txwi_80211()
wifi: mt76: mt7925: Fix possible oob access in mt7925_mac_write_txwi_80211()
wifi: mt76: mt7996: Fix possible oob access in mt7996_mac_write_txwi_80211()
wifi: wlcore: Fix a locking bug
wifi: cw1200: Fix locking in error paths
wifi: mac80211: fix missing ieee80211_eml_params member initialization
wifi: rsi: Don't default to -EOPNOTSUPP in rsi_mac80211_config
wifi: ath12k: fix station lookup failure when disconnecting from AP
wifi: ath12k: use correct pdev id when requesting firmware stats
====================
Link: https://patch.msgid.link/20260304112500.169639-3-johannes@sipsolutions.net
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
2697c45a48
|
|
@ -5430,7 +5430,7 @@ int ath12k_mac_op_get_txpower(struct ieee80211_hw *hw,
|
|||
ar->last_tx_power_update))
|
||||
goto send_tx_power;
|
||||
|
||||
params.pdev_id = ar->pdev->pdev_id;
|
||||
params.pdev_id = ath12k_mac_get_target_pdev_id(ar);
|
||||
params.vdev_id = arvif->vdev_id;
|
||||
params.stats_id = WMI_REQUEST_PDEV_STAT;
|
||||
ret = ath12k_mac_get_fw_stats(ar, ¶ms);
|
||||
|
|
@ -13452,7 +13452,7 @@ void ath12k_mac_op_sta_statistics(struct ieee80211_hw *hw,
|
|||
/* TODO: Use real NF instead of default one. */
|
||||
signal = rate_info.rssi_comb;
|
||||
|
||||
params.pdev_id = ar->pdev->pdev_id;
|
||||
params.pdev_id = ath12k_mac_get_target_pdev_id(ar);
|
||||
params.vdev_id = 0;
|
||||
params.stats_id = WMI_REQUEST_VDEV_STAT;
|
||||
|
||||
|
|
@ -13580,7 +13580,7 @@ void ath12k_mac_op_link_sta_statistics(struct ieee80211_hw *hw,
|
|||
spin_unlock_bh(&ar->ab->dp->dp_lock);
|
||||
|
||||
if (!signal && ahsta->ahvif->vdev_type == WMI_VDEV_TYPE_STA) {
|
||||
params.pdev_id = ar->pdev->pdev_id;
|
||||
params.pdev_id = ath12k_mac_get_target_pdev_id(ar);
|
||||
params.vdev_id = 0;
|
||||
params.stats_id = WMI_REQUEST_VDEV_STAT;
|
||||
|
||||
|
|
|
|||
|
|
@ -8241,8 +8241,6 @@ static int ath12k_wmi_tlv_fw_stats_data_parse(struct ath12k_base *ab,
|
|||
struct ath12k_fw_stats *stats = parse->stats;
|
||||
struct ath12k *ar;
|
||||
struct ath12k_link_vif *arvif;
|
||||
struct ieee80211_sta *sta;
|
||||
struct ath12k_sta *ahsta;
|
||||
struct ath12k_link_sta *arsta;
|
||||
int i, ret = 0;
|
||||
const void *data = ptr;
|
||||
|
|
@ -8278,21 +8276,19 @@ static int ath12k_wmi_tlv_fw_stats_data_parse(struct ath12k_base *ab,
|
|||
|
||||
arvif = ath12k_mac_get_arvif(ar, le32_to_cpu(src->vdev_id));
|
||||
if (arvif) {
|
||||
sta = ieee80211_find_sta_by_ifaddr(ath12k_ar_to_hw(ar),
|
||||
arvif->bssid,
|
||||
NULL);
|
||||
if (sta) {
|
||||
ahsta = ath12k_sta_to_ahsta(sta);
|
||||
arsta = &ahsta->deflink;
|
||||
spin_lock_bh(&ab->base_lock);
|
||||
arsta = ath12k_link_sta_find_by_addr(ab, arvif->bssid);
|
||||
if (arsta) {
|
||||
arsta->rssi_beacon = le32_to_cpu(src->beacon_snr);
|
||||
ath12k_dbg(ab, ATH12K_DBG_WMI,
|
||||
"wmi stats vdev id %d snr %d\n",
|
||||
src->vdev_id, src->beacon_snr);
|
||||
} else {
|
||||
ath12k_dbg(ab, ATH12K_DBG_WMI,
|
||||
"not found station bssid %pM for vdev stat\n",
|
||||
arvif->bssid);
|
||||
ath12k_warn(ab,
|
||||
"not found link sta with bssid %pM for vdev stat\n",
|
||||
arvif->bssid);
|
||||
}
|
||||
spin_unlock_bh(&ab->base_lock);
|
||||
}
|
||||
|
||||
data += sizeof(*src);
|
||||
|
|
@ -8363,8 +8359,6 @@ static int ath12k_wmi_tlv_rssi_chain_parse(struct ath12k_base *ab,
|
|||
struct ath12k_fw_stats *stats = parse->stats;
|
||||
struct ath12k_link_vif *arvif;
|
||||
struct ath12k_link_sta *arsta;
|
||||
struct ieee80211_sta *sta;
|
||||
struct ath12k_sta *ahsta;
|
||||
struct ath12k *ar;
|
||||
int vdev_id;
|
||||
int j;
|
||||
|
|
@ -8400,19 +8394,15 @@ static int ath12k_wmi_tlv_rssi_chain_parse(struct ath12k_base *ab,
|
|||
"stats bssid %pM vif %p\n",
|
||||
arvif->bssid, arvif->ahvif->vif);
|
||||
|
||||
sta = ieee80211_find_sta_by_ifaddr(ath12k_ar_to_hw(ar),
|
||||
arvif->bssid,
|
||||
NULL);
|
||||
if (!sta) {
|
||||
ath12k_dbg(ab, ATH12K_DBG_WMI,
|
||||
"not found station of bssid %pM for rssi chain\n",
|
||||
arvif->bssid);
|
||||
guard(spinlock_bh)(&ab->base_lock);
|
||||
arsta = ath12k_link_sta_find_by_addr(ab, arvif->bssid);
|
||||
if (!arsta) {
|
||||
ath12k_warn(ab,
|
||||
"not found link sta with bssid %pM for rssi chain\n",
|
||||
arvif->bssid);
|
||||
return -EPROTO;
|
||||
}
|
||||
|
||||
ahsta = ath12k_sta_to_ahsta(sta);
|
||||
arsta = &ahsta->deflink;
|
||||
|
||||
BUILD_BUG_ON(ARRAY_SIZE(arsta->chain_signal) >
|
||||
ARRAY_SIZE(stats_rssi->rssi_avg_beacon));
|
||||
|
||||
|
|
|
|||
|
|
@ -413,6 +413,7 @@ mt76_connac2_mac_write_txwi_80211(struct mt76_dev *dev, __le32 *txwi,
|
|||
u32 val;
|
||||
|
||||
if (ieee80211_is_action(fc) &&
|
||||
skb->len >= IEEE80211_MIN_ACTION_SIZE + 1 + 1 + 2 &&
|
||||
mgmt->u.action.category == WLAN_CATEGORY_BACK &&
|
||||
mgmt->u.action.u.addba_req.action_code == WLAN_ACTION_ADDBA_REQ) {
|
||||
u16 capab = le16_to_cpu(mgmt->u.action.u.addba_req.capab);
|
||||
|
|
|
|||
|
|
@ -668,6 +668,7 @@ mt7925_mac_write_txwi_80211(struct mt76_dev *dev, __le32 *txwi,
|
|||
u32 val;
|
||||
|
||||
if (ieee80211_is_action(fc) &&
|
||||
skb->len >= IEEE80211_MIN_ACTION_SIZE + 1 &&
|
||||
mgmt->u.action.category == WLAN_CATEGORY_BACK &&
|
||||
mgmt->u.action.u.addba_req.action_code == WLAN_ACTION_ADDBA_REQ)
|
||||
tid = MT_TX_ADDBA;
|
||||
|
|
|
|||
|
|
@ -800,6 +800,7 @@ mt7996_mac_write_txwi_80211(struct mt7996_dev *dev, __le32 *txwi,
|
|||
u32 val;
|
||||
|
||||
if (ieee80211_is_action(fc) &&
|
||||
skb->len >= IEEE80211_MIN_ACTION_SIZE + 1 &&
|
||||
mgmt->u.action.category == WLAN_CATEGORY_BACK &&
|
||||
mgmt->u.action.u.addba_req.action_code == WLAN_ACTION_ADDBA_REQ) {
|
||||
if (is_mt7990(&dev->mt76))
|
||||
|
|
|
|||
|
|
@ -668,7 +668,7 @@ static int rsi_mac80211_config(struct ieee80211_hw *hw,
|
|||
struct rsi_hw *adapter = hw->priv;
|
||||
struct rsi_common *common = adapter->priv;
|
||||
struct ieee80211_conf *conf = &hw->conf;
|
||||
int status = -EOPNOTSUPP;
|
||||
int status = 0;
|
||||
|
||||
mutex_lock(&common->mutex);
|
||||
|
||||
|
|
|
|||
|
|
@ -264,12 +264,14 @@ int cw1200_wow_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)
|
|||
wiphy_err(priv->hw->wiphy,
|
||||
"PM request failed: %d. WoW is disabled.\n", ret);
|
||||
cw1200_wow_resume(hw);
|
||||
mutex_unlock(&priv->conf_mutex);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
/* Force resume if event is coming from the device. */
|
||||
if (atomic_read(&priv->bh_rx)) {
|
||||
cw1200_wow_resume(hw);
|
||||
mutex_unlock(&priv->conf_mutex);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1875,6 +1875,8 @@ static int __maybe_unused wl1271_op_resume(struct ieee80211_hw *hw)
|
|||
wl->wow_enabled);
|
||||
WARN_ON(!wl->wow_enabled);
|
||||
|
||||
mutex_lock(&wl->mutex);
|
||||
|
||||
ret = pm_runtime_force_resume(wl->dev);
|
||||
if (ret < 0) {
|
||||
wl1271_error("ELP wakeup failure!");
|
||||
|
|
@ -1891,8 +1893,6 @@ static int __maybe_unused wl1271_op_resume(struct ieee80211_hw *hw)
|
|||
run_irq_work = true;
|
||||
spin_unlock_irqrestore(&wl->wl_lock, flags);
|
||||
|
||||
mutex_lock(&wl->mutex);
|
||||
|
||||
/* test the recovery flag before calling any SDIO functions */
|
||||
pending_recovery = test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS,
|
||||
&wl->flags);
|
||||
|
|
|
|||
|
|
@ -154,6 +154,7 @@ void ieee80211_rx_eml_op_mode_notif(struct ieee80211_sub_if_data *sdata,
|
|||
u8 *ptr = mgmt->u.action.u.eml_omn.variable;
|
||||
struct ieee80211_eml_params eml_params = {
|
||||
.link_id = status->link_id,
|
||||
.control = control,
|
||||
};
|
||||
struct sta_info *sta;
|
||||
int opt_len = 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user