Skip to content

Commit 081b575

Browse files
committed
Johannes berg says: ==================== Few more fixes: - cfg80211/mac80211 - stop possible runaway wiphy worker - EHT should not use reserved MPDU size bits - don't run worker for stopped interfaces - fix SA Query processing with MLO - fix lookup of assoc link BSS entries - correct station flush on unauthorize - iwlwifi: - TSO fixes - fix non-MSI-X platforms - stop possible runaway restart worker - rejigger maintainers so I'm not CC'ed on everything ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents d2b9d97 + 8ae227f commit 081b575

File tree

10 files changed

+89
-33
lines changed

10 files changed

+89
-33
lines changed

MAINTAINERS

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ F: include/net/ieee80211_radiotap.h
124124
F: include/net/iw_handler.h
125125
F: include/net/wext.h
126126
F: include/uapi/linux/nl80211.h
127+
N: include/uapi/linux/nl80211-.*
127128
F: include/uapi/linux/wireless.h
128129
F: net/wireless/
129130

@@ -514,7 +515,7 @@ F: drivers/hwmon/adm1029.c
514515
ADM8211 WIRELESS DRIVER
515516
516517
S: Orphan
517-
F: drivers/net/wireless/admtek/adm8211.*
518+
F: drivers/net/wireless/admtek/
518519

519520
ADP1050 HARDWARE MONITOR DRIVER
520521
M: Radu Sabau <[email protected]>
@@ -6207,7 +6208,7 @@ F: Documentation/process/cve.rst
62076208

62086209
CW1200 WLAN driver
62096210
S: Orphan
6210-
F: drivers/net/wireless/st/cw1200/
6211+
F: drivers/net/wireless/st/
62116212
F: include/linux/platform_data/net-cw1200.h
62126213

62136214
CX18 VIDEO4LINUX DRIVER
@@ -13997,6 +13998,7 @@ MARVELL LIBERTAS WIRELESS DRIVER
1399713998
1399813999
S: Orphan
1399914000
F: drivers/net/wireless/marvell/libertas/
14001+
F: drivers/net/wireless/marvell/libertas_tf/
1400014002

1400114003
MARVELL MACCHIATOBIN SUPPORT
1400214004
M: Russell King <[email protected]>
@@ -15666,7 +15668,7 @@ M: Ajay Singh <[email protected]>
1566615668
M: Claudiu Beznea <[email protected]>
1566715669
1566815670
S: Supported
15669-
F: drivers/net/wireless/microchip/wilc1000/
15671+
F: drivers/net/wireless/microchip/
1567015672

1567115673
MICROSEMI MIPS SOCS
1567215674
M: Alexandre Belloni <[email protected]>
@@ -16452,6 +16454,23 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless.git
1645216454
T: git git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git
1645316455
F: Documentation/devicetree/bindings/net/wireless/
1645416456
F: drivers/net/wireless/
16457+
X: drivers/net/wireless/ath/
16458+
X: drivers/net/wireless/broadcom/
16459+
X: drivers/net/wireless/intel/
16460+
X: drivers/net/wireless/intersil/
16461+
X: drivers/net/wireless/marvell/
16462+
X: drivers/net/wireless/mediatek/mt76/
16463+
X: drivers/net/wireless/mediatek/mt7601u/
16464+
X: drivers/net/wireless/microchip/
16465+
X: drivers/net/wireless/purelifi/
16466+
X: drivers/net/wireless/quantenna/
16467+
X: drivers/net/wireless/ralink/
16468+
X: drivers/net/wireless/realtek/
16469+
X: drivers/net/wireless/rsi/
16470+
X: drivers/net/wireless/silabs/
16471+
X: drivers/net/wireless/st/
16472+
X: drivers/net/wireless/ti/
16473+
X: drivers/net/wireless/zydas/
1645516474

1645616475
NETWORKING [DSA]
1645716476
M: Andrew Lunn <[email protected]>
@@ -17836,7 +17855,7 @@ M: Christian Lamparter <[email protected]>
1783617855
1783717856
S: Maintained
1783817857
W: https://wireless.wiki.kernel.org/en/users/Drivers/p54
17839-
F: drivers/net/wireless/intersil/p54/
17858+
F: drivers/net/wireless/intersil/
1784017859

1784117860
PACKET SOCKETS
1784217861
M: Willem de Bruijn <[email protected]>
@@ -19113,7 +19132,7 @@ PURELIFI PLFXLC DRIVER
1911319132
M: Srinivasan Raju <[email protected]>
1911419133
1911519134
S: Supported
19116-
F: drivers/net/wireless/purelifi/plfxlc/
19135+
F: drivers/net/wireless/purelifi/
1911719136

1911819137
PVRUSB2 VIDEO4LINUX DRIVER
1911919138
M: Mike Isely <[email protected]>
@@ -19664,7 +19683,7 @@ M: Igor Mitsyanko <[email protected]>
1966419683
R: Sergey Matyukevich <[email protected]>
1966519684
1966619685
S: Maintained
19667-
F: drivers/net/wireless/quantenna
19686+
F: drivers/net/wireless/quantenna/
1966819687

1966919688
RADEON and AMDGPU DRM DRIVERS
1967019689
M: Alex Deucher <[email protected]>
@@ -19744,7 +19763,7 @@ RALINK RT2X00 WIRELESS LAN DRIVER
1974419763
M: Stanislaw Gruszka <[email protected]>
1974519764
1974619765
S: Maintained
19747-
F: drivers/net/wireless/ralink/rt2x00/
19766+
F: drivers/net/wireless/ralink/
1974819767

1974919768
RAMDISK RAM BLOCK DEVICE DRIVER
1975019769
M: Jens Axboe <[email protected]>
@@ -21710,7 +21729,7 @@ SILICON LABS WIRELESS DRIVERS (for WFxxx series)
2171021729
M: Jérôme Pouiller <[email protected]>
2171121730
S: Supported
2171221731
F: Documentation/devicetree/bindings/net/wireless/silabs,wfx.yaml
21713-
F: drivers/net/wireless/silabs/wfx/
21732+
F: drivers/net/wireless/silabs/
2171421733

2171521734
SILICON MOTION SM712 FRAME BUFFER DRIVER
2171621735
M: Sudip Mukherjee <[email protected]>
@@ -26210,7 +26229,7 @@ F: mm/zbud.c
2621026229
ZD1211RW WIRELESS DRIVER
2621126230
2621226231
S: Orphan
26213-
F: drivers/net/wireless/zydas/zd1211rw/
26232+
F: drivers/net/wireless/zydas/
2621426233

2621526234
ZD1301 MEDIA DRIVER
2621626235

drivers/net/wireless/intel/iwlwifi/iwl-trans.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,8 @@ void iwl_trans_op_mode_leave(struct iwl_trans *trans)
403403

404404
iwl_trans_pcie_op_mode_leave(trans);
405405

406+
cancel_work_sync(&trans->restart.wk);
407+
406408
trans->op_mode = NULL;
407409

408410
trans->state = IWL_TRANS_NO_FW;

drivers/net/wireless/intel/iwlwifi/mvm/fw.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
22
/*
3-
* Copyright (C) 2012-2014, 2018-2024 Intel Corporation
3+
* Copyright (C) 2012-2014, 2018-2025 Intel Corporation
44
* Copyright (C) 2013-2015 Intel Mobile Communications GmbH
55
* Copyright (C) 2016-2017 Intel Deutschland GmbH
66
*/
@@ -422,6 +422,8 @@ static int iwl_mvm_load_ucode_wait_alive(struct iwl_mvm *mvm,
422422
/* if reached this point, Alive notification was received */
423423
iwl_mei_alive_notif(true);
424424

425+
iwl_trans_fw_alive(mvm->trans, alive_data.scd_base_addr);
426+
425427
ret = iwl_pnvm_load(mvm->trans, &mvm->notif_wait,
426428
&mvm->fw->ucode_capa);
427429
if (ret) {
@@ -430,8 +432,6 @@ static int iwl_mvm_load_ucode_wait_alive(struct iwl_mvm *mvm,
430432
return ret;
431433
}
432434

433-
iwl_trans_fw_alive(mvm->trans, alive_data.scd_base_addr);
434-
435435
/*
436436
* Note: all the queues are enabled as part of the interface
437437
* initialization, but in firmware restart scenarios they

drivers/net/wireless/intel/iwlwifi/pcie/tx.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1869,12 +1869,12 @@ struct sg_table *iwl_pcie_prep_tso(struct iwl_trans *trans, struct sk_buff *skb,
18691869
unsigned int offset)
18701870
{
18711871
struct sg_table *sgt;
1872-
unsigned int n_segments;
1872+
unsigned int n_segments = skb_shinfo(skb)->nr_frags + 1;
1873+
int orig_nents;
18731874

18741875
if (WARN_ON_ONCE(skb_has_frag_list(skb)))
18751876
return NULL;
18761877

1877-
n_segments = DIV_ROUND_UP(skb->len - offset, skb_shinfo(skb)->gso_size);
18781878
*hdr = iwl_pcie_get_page_hdr(trans,
18791879
hdr_room + __alignof__(struct sg_table) +
18801880
sizeof(struct sg_table) +
@@ -1889,11 +1889,12 @@ struct sg_table *iwl_pcie_prep_tso(struct iwl_trans *trans, struct sk_buff *skb,
18891889
sg_init_table(sgt->sgl, n_segments);
18901890

18911891
/* Only map the data, not the header (it is copied to the TSO page) */
1892-
sgt->orig_nents = skb_to_sgvec(skb, sgt->sgl, offset,
1893-
skb->len - offset);
1894-
if (WARN_ON_ONCE(sgt->orig_nents <= 0))
1892+
orig_nents = skb_to_sgvec(skb, sgt->sgl, offset, skb->len - offset);
1893+
if (WARN_ON_ONCE(orig_nents <= 0))
18951894
return NULL;
18961895

1896+
sgt->orig_nents = orig_nents;
1897+
18971898
/* And map the entire SKB */
18981899
if (dma_map_sgtable(trans->dev, sgt, DMA_TO_DEVICE, 0) < 0)
18991900
return NULL;

net/mac80211/eht.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
/*
33
* EHT handling
44
*
5-
* Copyright(c) 2021-2024 Intel Corporation
5+
* Copyright(c) 2021-2025 Intel Corporation
66
*/
77

88
#include "ieee80211_i.h"
@@ -76,6 +76,13 @@ ieee80211_eht_cap_ie_to_sta_eht_cap(struct ieee80211_sub_if_data *sdata,
7676
link_sta->cur_max_bandwidth = ieee80211_sta_cap_rx_bw(link_sta);
7777
link_sta->pub->bandwidth = ieee80211_sta_cur_vht_bw(link_sta);
7878

79+
/*
80+
* The MPDU length bits are reserved on all but 2.4 GHz and get set via
81+
* VHT (5 GHz) or HE (6 GHz) capabilities.
82+
*/
83+
if (sband->band != NL80211_BAND_2GHZ)
84+
return;
85+
7986
switch (u8_get_bits(eht_cap->eht_cap_elem.mac_cap_info[0],
8087
IEEE80211_EHT_MAC_CAP0_MAX_MPDU_LEN_MASK)) {
8188
case IEEE80211_EHT_MAC_CAP0_MAX_MPDU_LEN_11454:

net/mac80211/rx.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* Copyright 2007-2010 Johannes Berg <[email protected]>
77
* Copyright 2013-2014 Intel Mobile Communications GmbH
88
* Copyright(c) 2015 - 2017 Intel Deutschland GmbH
9-
* Copyright (C) 2018-2024 Intel Corporation
9+
* Copyright (C) 2018-2025 Intel Corporation
1010
*/
1111

1212
#include <linux/jiffies.h>
@@ -3329,8 +3329,8 @@ static void ieee80211_process_sa_query_req(struct ieee80211_sub_if_data *sdata,
33293329
return;
33303330
}
33313331

3332-
if (!ether_addr_equal(mgmt->sa, sdata->deflink.u.mgd.bssid) ||
3333-
!ether_addr_equal(mgmt->bssid, sdata->deflink.u.mgd.bssid)) {
3332+
if (!ether_addr_equal(mgmt->sa, sdata->vif.cfg.ap_addr) ||
3333+
!ether_addr_equal(mgmt->bssid, sdata->vif.cfg.ap_addr)) {
33343334
/* Not from the current AP or not associated yet. */
33353335
return;
33363336
}
@@ -3346,9 +3346,9 @@ static void ieee80211_process_sa_query_req(struct ieee80211_sub_if_data *sdata,
33463346

33473347
skb_reserve(skb, local->hw.extra_tx_headroom);
33483348
resp = skb_put_zero(skb, 24);
3349-
memcpy(resp->da, mgmt->sa, ETH_ALEN);
3349+
memcpy(resp->da, sdata->vif.cfg.ap_addr, ETH_ALEN);
33503350
memcpy(resp->sa, sdata->vif.addr, ETH_ALEN);
3351-
memcpy(resp->bssid, sdata->deflink.u.mgd.bssid, ETH_ALEN);
3351+
memcpy(resp->bssid, sdata->vif.cfg.ap_addr, ETH_ALEN);
33523352
resp->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
33533353
IEEE80211_STYPE_ACTION);
33543354
skb_put(skb, 1 + sizeof(resp->u.action.u.sa_query));

net/mac80211/sta_info.c

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* Copyright 2006-2007 Jiri Benc <[email protected]>
55
* Copyright 2013-2014 Intel Mobile Communications GmbH
66
* Copyright (C) 2015 - 2017 Intel Deutschland GmbH
7-
* Copyright (C) 2018-2023 Intel Corporation
7+
* Copyright (C) 2018-2024 Intel Corporation
88
*/
99

1010
#include <linux/module.h>
@@ -1335,9 +1335,13 @@ static int _sta_info_move_state(struct sta_info *sta,
13351335
sta->sta.addr, new_state);
13361336

13371337
/* notify the driver before the actual changes so it can
1338-
* fail the transition
1338+
* fail the transition if the state is increasing.
1339+
* The driver is required not to fail when the transition
1340+
* is decreasing the state, so first, do all the preparation
1341+
* work and only then, notify the driver.
13391342
*/
1340-
if (test_sta_flag(sta, WLAN_STA_INSERTED)) {
1343+
if (new_state > sta->sta_state &&
1344+
test_sta_flag(sta, WLAN_STA_INSERTED)) {
13411345
int err = drv_sta_state(sta->local, sta->sdata, sta,
13421346
sta->sta_state, new_state);
13431347
if (err)
@@ -1413,6 +1417,16 @@ static int _sta_info_move_state(struct sta_info *sta,
14131417
break;
14141418
}
14151419

1420+
if (new_state < sta->sta_state &&
1421+
test_sta_flag(sta, WLAN_STA_INSERTED)) {
1422+
int err = drv_sta_state(sta->local, sta->sdata, sta,
1423+
sta->sta_state, new_state);
1424+
1425+
WARN_ONCE(err,
1426+
"Driver is not allowed to fail if the sta_state is transitioning down the list: %d\n",
1427+
err);
1428+
}
1429+
14161430
sta->sta_state = new_state;
14171431

14181432
return 0;

net/mac80211/util.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* Copyright 2007 Johannes Berg <[email protected]>
77
* Copyright 2013-2014 Intel Mobile Communications GmbH
88
* Copyright (C) 2015-2017 Intel Deutschland GmbH
9-
* Copyright (C) 2018-2024 Intel Corporation
9+
* Copyright (C) 2018-2025 Intel Corporation
1010
*
1111
* utilities for mac80211
1212
*/
@@ -2193,8 +2193,10 @@ int ieee80211_reconfig(struct ieee80211_local *local)
21932193
ieee80211_reconfig_roc(local);
21942194

21952195
/* Requeue all works */
2196-
list_for_each_entry(sdata, &local->interfaces, list)
2197-
wiphy_work_queue(local->hw.wiphy, &sdata->work);
2196+
list_for_each_entry(sdata, &local->interfaces, list) {
2197+
if (ieee80211_sdata_running(sdata))
2198+
wiphy_work_queue(local->hw.wiphy, &sdata->work);
2199+
}
21982200
}
21992201

22002202
ieee80211_wake_queues_by_reason(hw, IEEE80211_MAX_QUEUE_MAP,

net/wireless/core.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,6 +1191,13 @@ void cfg80211_dev_free(struct cfg80211_registered_device *rdev)
11911191
{
11921192
struct cfg80211_internal_bss *scan, *tmp;
11931193
struct cfg80211_beacon_registration *reg, *treg;
1194+
unsigned long flags;
1195+
1196+
spin_lock_irqsave(&rdev->wiphy_work_lock, flags);
1197+
WARN_ON(!list_empty(&rdev->wiphy_work_list));
1198+
spin_unlock_irqrestore(&rdev->wiphy_work_lock, flags);
1199+
cancel_work_sync(&rdev->wiphy_work);
1200+
11941201
rfkill_destroy(rdev->wiphy.rfkill);
11951202
list_for_each_entry_safe(reg, treg, &rdev->beacon_registrations, list) {
11961203
list_del(&reg->list);

net/wireless/nl80211.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11123,6 +11123,7 @@ static struct cfg80211_bss *nl80211_assoc_bss(struct cfg80211_registered_device
1112311123

1112411124
static int nl80211_process_links(struct cfg80211_registered_device *rdev,
1112511125
struct cfg80211_assoc_link *links,
11126+
int assoc_link_id,
1112611127
const u8 *ssid, int ssid_len,
1112711128
struct genl_info *info)
1112811129
{
@@ -11153,7 +11154,7 @@ static int nl80211_process_links(struct cfg80211_registered_device *rdev,
1115311154
}
1115411155
links[link_id].bss =
1115511156
nl80211_assoc_bss(rdev, ssid, ssid_len, attrs,
11156-
link_id, link_id);
11157+
assoc_link_id, link_id);
1115711158
if (IS_ERR(links[link_id].bss)) {
1115811159
err = PTR_ERR(links[link_id].bss);
1115911160
links[link_id].bss = NULL;
@@ -11350,8 +11351,8 @@ static int nl80211_associate(struct sk_buff *skb, struct genl_info *info)
1135011351
req.ap_mld_addr = nla_data(info->attrs[NL80211_ATTR_MLD_ADDR]);
1135111352
ap_addr = req.ap_mld_addr;
1135211353

11353-
err = nl80211_process_links(rdev, req.links, ssid, ssid_len,
11354-
info);
11354+
err = nl80211_process_links(rdev, req.links, req.link_id,
11355+
ssid, ssid_len, info);
1135511356
if (err)
1135611357
goto free;
1135711358

@@ -16506,7 +16507,10 @@ static int nl80211_assoc_ml_reconf(struct sk_buff *skb, struct genl_info *info)
1650616507

1650716508
add_links = 0;
1650816509
if (info->attrs[NL80211_ATTR_MLO_LINKS]) {
16509-
err = nl80211_process_links(rdev, links, NULL, 0, info);
16510+
err = nl80211_process_links(rdev, links,
16511+
/* mark as MLO, but not assoc */
16512+
IEEE80211_MLD_MAX_NUM_LINKS,
16513+
NULL, 0, info);
1651016514
if (err)
1651116515
return err;
1651216516

0 commit comments

Comments
 (0)