Skip to content

Commit a6694b7

Browse files
author
Paolo Abeni
committed
Johannes Berg says: ==================== Various fixes all over, most are recent regressions but also some long-standing issues: - cfg80211: - fix an issue with overly long SSIDs - mac80211: - long-standing beacon protection issue on some devices - for for a multi-BSSID AP-side issue - fix a syzbot warning on OCB (not really used in practice) - remove WARN on connections using disabled channels, as that can happen due to changes in the disable flag - fix monitor mode list iteration - iwlwifi: - fix firmware loading on certain (really old) devices - add settime64 to PTP clock to avoid a warning and clock registration failure, but it's not actually supported - rtw88: - remove WQ_UNBOUND since it broke USB adapters (because it can't be used with WQ_BH) - fix SDIO issues with certain devices - rtl8192cu: fix TID array out-of-bounds (since 6.9) - wlcore (TI): add missing skb push headroom increase * tag 'wireless-2025-12-17' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless: wifi: iwlwifi: Implement settime64 as stub for MVM/MLD PTP wifi: iwlwifi: Fix firmware version handling wifi: mac80211: ocb: skip rx_no_sta when interface is not joined wifi: mac80211: do not use old MBSSID elements wifi: mac80211: don't WARN for connections on invalid channels wifi: wlcore: ensure skb headroom before skb_push wifi: cfg80211: sme: store capped length in __cfg80211_connect_result() wifi: mac80211: fix list iteration in ieee80211_add_virtual_monitor() wifi: mac80211: Discard Beacon frames to non-broadcast address Revert "wifi: rtw88: add WQ_UNBOUND to alloc_workqueue users" wifi: rtlwifi: 8192cu: fix tid out of range in rtl92cu_tx_fill_desc() wifi: rtw88: limit indirect IO under powered off for RTL8822CS ==================== Link: https://patch.msgid.link/20251217201441.59876-3-johannes@sipsolutions.net Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2 parents 85f4b0c + 81d90d9 commit a6694b7

13 files changed

Lines changed: 41 additions & 19 deletions

File tree

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1597,7 +1597,7 @@ static void _iwl_op_mode_stop(struct iwl_drv *drv)
15971597
*/
15981598
static void iwl_req_fw_callback(const struct firmware *ucode_raw, void *context)
15991599
{
1600-
unsigned int min_core, max_core, loaded_core;
1600+
int min_core, max_core, loaded_core;
16011601
struct iwl_drv *drv = context;
16021602
struct iwl_fw *fw = &drv->fw;
16031603
const struct iwl_ucode_header *ucode;
@@ -1676,7 +1676,7 @@ static void iwl_req_fw_callback(const struct firmware *ucode_raw, void *context)
16761676
if (loaded_core < min_core || loaded_core > max_core) {
16771677
IWL_ERR(drv,
16781678
"Driver unable to support your firmware API. "
1679-
"Driver supports FW core %u..%u, firmware is %u.\n",
1679+
"Driver supports FW core %d..%d, firmware is %d.\n",
16801680
min_core, max_core, loaded_core);
16811681
goto try_again;
16821682
}

drivers/net/wireless/intel/iwlwifi/mld/ptp.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,12 @@ static int iwl_mld_ptp_gettime(struct ptp_clock_info *ptp,
121121
return 0;
122122
}
123123

124+
static int iwl_mld_ptp_settime(struct ptp_clock_info *ptp,
125+
const struct timespec64 *ts)
126+
{
127+
return -EOPNOTSUPP;
128+
}
129+
124130
static int iwl_mld_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
125131
{
126132
struct iwl_mld *mld = container_of(ptp, struct iwl_mld,
@@ -279,6 +285,7 @@ void iwl_mld_ptp_init(struct iwl_mld *mld)
279285

280286
mld->ptp_data.ptp_clock_info.owner = THIS_MODULE;
281287
mld->ptp_data.ptp_clock_info.gettime64 = iwl_mld_ptp_gettime;
288+
mld->ptp_data.ptp_clock_info.settime64 = iwl_mld_ptp_settime;
282289
mld->ptp_data.ptp_clock_info.max_adj = 0x7fffffff;
283290
mld->ptp_data.ptp_clock_info.adjtime = iwl_mld_ptp_adjtime;
284291
mld->ptp_data.ptp_clock_info.adjfine = iwl_mld_ptp_adjfine;

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,12 @@ static int iwl_mvm_ptp_gettime(struct ptp_clock_info *ptp,
220220
return 0;
221221
}
222222

223+
static int iwl_mvm_ptp_settime(struct ptp_clock_info *ptp,
224+
const struct timespec64 *ts)
225+
{
226+
return -EOPNOTSUPP;
227+
}
228+
223229
static int iwl_mvm_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
224230
{
225231
struct iwl_mvm *mvm = container_of(ptp, struct iwl_mvm,
@@ -281,6 +287,7 @@ void iwl_mvm_ptp_init(struct iwl_mvm *mvm)
281287
mvm->ptp_data.ptp_clock_info.adjfine = iwl_mvm_ptp_adjfine;
282288
mvm->ptp_data.ptp_clock_info.adjtime = iwl_mvm_ptp_adjtime;
283289
mvm->ptp_data.ptp_clock_info.gettime64 = iwl_mvm_ptp_gettime;
290+
mvm->ptp_data.ptp_clock_info.settime64 = iwl_mvm_ptp_settime;
284291
mvm->ptp_data.scaled_freq = SCALE_FACTOR;
285292

286293
/* Give a short 'friendly name' to identify the PHC clock */

drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,8 @@ void rtl92cu_tx_fill_desc(struct ieee80211_hw *hw,
511511
if (sta) {
512512
sta_entry = (struct rtl_sta_info *)sta->drv_priv;
513513
tid = ieee80211_get_tid(hdr);
514-
agg_state = sta_entry->tids[tid].agg.agg_state;
514+
if (tid < MAX_TID_COUNT)
515+
agg_state = sta_entry->tids[tid].agg.agg_state;
515516
ampdu_density = sta->deflink.ht_cap.ampdu_density;
516517
}
517518

drivers/net/wireless/realtek/rtw88/sdio.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,10 @@ static u32 rtw_sdio_to_io_address(struct rtw_dev *rtwdev, u32 addr,
144144

145145
static bool rtw_sdio_use_direct_io(struct rtw_dev *rtwdev, u32 addr)
146146
{
147+
bool might_indirect_under_power_off = rtwdev->chip->id == RTW_CHIP_TYPE_8822C;
148+
147149
if (!test_bit(RTW_FLAG_POWERON, rtwdev->flags) &&
148-
!rtw_sdio_is_bus_addr(addr))
150+
!rtw_sdio_is_bus_addr(addr) && might_indirect_under_power_off)
149151
return false;
150152

151153
return !rtw_sdio_is_sdio30_supported(rtwdev) ||

drivers/net/wireless/realtek/rtw88/usb.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -965,8 +965,7 @@ static int rtw_usb_init_rx(struct rtw_dev *rtwdev)
965965
struct sk_buff *rx_skb;
966966
int i;
967967

968-
rtwusb->rxwq = alloc_workqueue("rtw88_usb: rx wq", WQ_BH | WQ_UNBOUND,
969-
0);
968+
rtwusb->rxwq = alloc_workqueue("rtw88_usb: rx wq", WQ_BH, 0);
970969
if (!rtwusb->rxwq) {
971970
rtw_err(rtwdev, "failed to create RX work queue\n");
972971
return -ENOMEM;

drivers/net/wireless/ti/wlcore/tx.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,11 @@ static int wl1271_tx_allocate(struct wl1271 *wl, struct wl12xx_vif *wlvif,
207207
total_blocks = wlcore_hw_calc_tx_blocks(wl, total_len, spare_blocks);
208208

209209
if (total_blocks <= wl->tx_blocks_available) {
210+
if (skb_headroom(skb) < (total_len - skb->len) &&
211+
pskb_expand_head(skb, (total_len - skb->len), 0, GFP_ATOMIC)) {
212+
wl1271_free_tx_id(wl, id);
213+
return -EAGAIN;
214+
}
210215
desc = skb_push(skb, total_len - skb->len);
211216

212217
wlcore_hw_set_tx_desc_blocks(wl, desc, total_blocks,

net/mac80211/cfg.c

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1345,7 +1345,6 @@ ieee80211_assign_beacon(struct ieee80211_sub_if_data *sdata,
13451345

13461346
size = sizeof(*new) + new_head_len + new_tail_len;
13471347

1348-
/* new or old multiple BSSID elements? */
13491348
if (params->mbssid_ies) {
13501349
mbssid = params->mbssid_ies;
13511350
size += struct_size(new->mbssid_ies, elem, mbssid->cnt);
@@ -1355,15 +1354,6 @@ ieee80211_assign_beacon(struct ieee80211_sub_if_data *sdata,
13551354
}
13561355
size += ieee80211_get_mbssid_beacon_len(mbssid, rnr,
13571356
mbssid->cnt);
1358-
} else if (old && old->mbssid_ies) {
1359-
mbssid = old->mbssid_ies;
1360-
size += struct_size(new->mbssid_ies, elem, mbssid->cnt);
1361-
if (old && old->rnr_ies) {
1362-
rnr = old->rnr_ies;
1363-
size += struct_size(new->rnr_ies, elem, rnr->cnt);
1364-
}
1365-
size += ieee80211_get_mbssid_beacon_len(mbssid, rnr,
1366-
mbssid->cnt);
13671357
}
13681358

13691359
new = kzalloc(size, GFP_KERNEL);

net/mac80211/iface.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1251,7 +1251,7 @@ int ieee80211_add_virtual_monitor(struct ieee80211_local *local,
12511251
if (!creator_sdata) {
12521252
struct ieee80211_sub_if_data *other;
12531253

1254-
list_for_each_entry(other, &local->mon_list, list) {
1254+
list_for_each_entry_rcu(other, &local->mon_list, u.mntr.list) {
12551255
if (!other->vif.bss_conf.mu_mimo_owner)
12561256
continue;
12571257

net/mac80211/mlme.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1126,7 +1126,10 @@ ieee80211_determine_chan_mode(struct ieee80211_sub_if_data *sdata,
11261126

11271127
while (!ieee80211_chandef_usable(sdata, &chanreq->oper,
11281128
IEEE80211_CHAN_DISABLED)) {
1129-
if (WARN_ON(chanreq->oper.width == NL80211_CHAN_WIDTH_20_NOHT)) {
1129+
if (chanreq->oper.width == NL80211_CHAN_WIDTH_20_NOHT) {
1130+
link_id_info(sdata, link_id,
1131+
"unusable channel (%d MHz) for connection\n",
1132+
chanreq->oper.chan->center_freq);
11301133
ret = -EINVAL;
11311134
goto free;
11321135
}

0 commit comments

Comments
 (0)