mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-11 17:10:13 +00:00
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
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEpeA8sTs3M8SN2hR410qiO8sPaAAFAmlDDm8ACgkQ10qiO8sP
aABxLQ/8D/ZDTy8caVoOIrR2SiF6OxeNMjy9hapRXxD9YozeiWMjS0gspKeQQQsV
uOGrbNGpF+DilxXsKGShh7kH2dpDhI01C+ikPCqJJKvWp5F02Bbiq6lIxm4ibQjM
gzSmUJmov/NjiY0E4hV/h2cClmRyccDdlRyTDiP+KiPhOH9ijZuxE3HCZXt7oroD
bK6M15I0F8gwr9L282efVMVwoE2aDhOHALgU4NtM3NY6r7cwfweVOZYmM6wy2anp
Hi4aXmc3K2xWLO6xscQyofbvVDWRizIF0ZRhWdcs4581yHDUCYrWyNlaL/g4UAu8
Dorf2ZLsv8eWQBSSQiL2ae4hQGeG34ODrbSCOLfZx8jwPMZ0UvwE17vXj8kDx637
GbZCU/Sfot6mcWrIW0lhjRPD4M+Wsllt12Ku2XpGn0x7IGYwySnXRykWc2ITJOWH
DHwm4Jid7a4m+je3tZLrkPcccibUA7j+anTO5UGe6BIuiUp/GaI7HXwXKijVY8iC
wk2Lj3kmwfWAJSNQ7TGWyPgqRGI4GM4vQ9mYjumKpDeHIV7XjX1hEqkaYodX3Wmk
nuOSiYJubjr4NG8DRlosvJEVYvLPtKfPV2MaDjW7rHt1oBtoY5sgFTtrlOf30D2X
sOfYqDffOe2WLvwwDUIJwf2ANbNzRgp2R3ltnf4srYrzfxz4O+s=
=3fsX
-----END PGP SIGNATURE-----
Merge tag 'wireless-2025-12-17' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless
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>
This commit is contained in:
commit
a6694b7e39
@ -1597,7 +1597,7 @@ static void _iwl_op_mode_stop(struct iwl_drv *drv)
|
||||
*/
|
||||
static void iwl_req_fw_callback(const struct firmware *ucode_raw, void *context)
|
||||
{
|
||||
unsigned int min_core, max_core, loaded_core;
|
||||
int min_core, max_core, loaded_core;
|
||||
struct iwl_drv *drv = context;
|
||||
struct iwl_fw *fw = &drv->fw;
|
||||
const struct iwl_ucode_header *ucode;
|
||||
@ -1676,7 +1676,7 @@ static void iwl_req_fw_callback(const struct firmware *ucode_raw, void *context)
|
||||
if (loaded_core < min_core || loaded_core > max_core) {
|
||||
IWL_ERR(drv,
|
||||
"Driver unable to support your firmware API. "
|
||||
"Driver supports FW core %u..%u, firmware is %u.\n",
|
||||
"Driver supports FW core %d..%d, firmware is %d.\n",
|
||||
min_core, max_core, loaded_core);
|
||||
goto try_again;
|
||||
}
|
||||
|
||||
@ -121,6 +121,12 @@ static int iwl_mld_ptp_gettime(struct ptp_clock_info *ptp,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int iwl_mld_ptp_settime(struct ptp_clock_info *ptp,
|
||||
const struct timespec64 *ts)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static int iwl_mld_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
|
||||
{
|
||||
struct iwl_mld *mld = container_of(ptp, struct iwl_mld,
|
||||
@ -279,6 +285,7 @@ void iwl_mld_ptp_init(struct iwl_mld *mld)
|
||||
|
||||
mld->ptp_data.ptp_clock_info.owner = THIS_MODULE;
|
||||
mld->ptp_data.ptp_clock_info.gettime64 = iwl_mld_ptp_gettime;
|
||||
mld->ptp_data.ptp_clock_info.settime64 = iwl_mld_ptp_settime;
|
||||
mld->ptp_data.ptp_clock_info.max_adj = 0x7fffffff;
|
||||
mld->ptp_data.ptp_clock_info.adjtime = iwl_mld_ptp_adjtime;
|
||||
mld->ptp_data.ptp_clock_info.adjfine = iwl_mld_ptp_adjfine;
|
||||
|
||||
@ -220,6 +220,12 @@ static int iwl_mvm_ptp_gettime(struct ptp_clock_info *ptp,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int iwl_mvm_ptp_settime(struct ptp_clock_info *ptp,
|
||||
const struct timespec64 *ts)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static int iwl_mvm_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
|
||||
{
|
||||
struct iwl_mvm *mvm = container_of(ptp, struct iwl_mvm,
|
||||
@ -281,6 +287,7 @@ void iwl_mvm_ptp_init(struct iwl_mvm *mvm)
|
||||
mvm->ptp_data.ptp_clock_info.adjfine = iwl_mvm_ptp_adjfine;
|
||||
mvm->ptp_data.ptp_clock_info.adjtime = iwl_mvm_ptp_adjtime;
|
||||
mvm->ptp_data.ptp_clock_info.gettime64 = iwl_mvm_ptp_gettime;
|
||||
mvm->ptp_data.ptp_clock_info.settime64 = iwl_mvm_ptp_settime;
|
||||
mvm->ptp_data.scaled_freq = SCALE_FACTOR;
|
||||
|
||||
/* Give a short 'friendly name' to identify the PHC clock */
|
||||
|
||||
@ -511,7 +511,8 @@ void rtl92cu_tx_fill_desc(struct ieee80211_hw *hw,
|
||||
if (sta) {
|
||||
sta_entry = (struct rtl_sta_info *)sta->drv_priv;
|
||||
tid = ieee80211_get_tid(hdr);
|
||||
agg_state = sta_entry->tids[tid].agg.agg_state;
|
||||
if (tid < MAX_TID_COUNT)
|
||||
agg_state = sta_entry->tids[tid].agg.agg_state;
|
||||
ampdu_density = sta->deflink.ht_cap.ampdu_density;
|
||||
}
|
||||
|
||||
|
||||
@ -144,8 +144,10 @@ static u32 rtw_sdio_to_io_address(struct rtw_dev *rtwdev, u32 addr,
|
||||
|
||||
static bool rtw_sdio_use_direct_io(struct rtw_dev *rtwdev, u32 addr)
|
||||
{
|
||||
bool might_indirect_under_power_off = rtwdev->chip->id == RTW_CHIP_TYPE_8822C;
|
||||
|
||||
if (!test_bit(RTW_FLAG_POWERON, rtwdev->flags) &&
|
||||
!rtw_sdio_is_bus_addr(addr))
|
||||
!rtw_sdio_is_bus_addr(addr) && might_indirect_under_power_off)
|
||||
return false;
|
||||
|
||||
return !rtw_sdio_is_sdio30_supported(rtwdev) ||
|
||||
|
||||
@ -965,8 +965,7 @@ static int rtw_usb_init_rx(struct rtw_dev *rtwdev)
|
||||
struct sk_buff *rx_skb;
|
||||
int i;
|
||||
|
||||
rtwusb->rxwq = alloc_workqueue("rtw88_usb: rx wq", WQ_BH | WQ_UNBOUND,
|
||||
0);
|
||||
rtwusb->rxwq = alloc_workqueue("rtw88_usb: rx wq", WQ_BH, 0);
|
||||
if (!rtwusb->rxwq) {
|
||||
rtw_err(rtwdev, "failed to create RX work queue\n");
|
||||
return -ENOMEM;
|
||||
|
||||
@ -207,6 +207,11 @@ static int wl1271_tx_allocate(struct wl1271 *wl, struct wl12xx_vif *wlvif,
|
||||
total_blocks = wlcore_hw_calc_tx_blocks(wl, total_len, spare_blocks);
|
||||
|
||||
if (total_blocks <= wl->tx_blocks_available) {
|
||||
if (skb_headroom(skb) < (total_len - skb->len) &&
|
||||
pskb_expand_head(skb, (total_len - skb->len), 0, GFP_ATOMIC)) {
|
||||
wl1271_free_tx_id(wl, id);
|
||||
return -EAGAIN;
|
||||
}
|
||||
desc = skb_push(skb, total_len - skb->len);
|
||||
|
||||
wlcore_hw_set_tx_desc_blocks(wl, desc, total_blocks,
|
||||
|
||||
@ -1345,7 +1345,6 @@ ieee80211_assign_beacon(struct ieee80211_sub_if_data *sdata,
|
||||
|
||||
size = sizeof(*new) + new_head_len + new_tail_len;
|
||||
|
||||
/* new or old multiple BSSID elements? */
|
||||
if (params->mbssid_ies) {
|
||||
mbssid = params->mbssid_ies;
|
||||
size += struct_size(new->mbssid_ies, elem, mbssid->cnt);
|
||||
@ -1355,15 +1354,6 @@ ieee80211_assign_beacon(struct ieee80211_sub_if_data *sdata,
|
||||
}
|
||||
size += ieee80211_get_mbssid_beacon_len(mbssid, rnr,
|
||||
mbssid->cnt);
|
||||
} else if (old && old->mbssid_ies) {
|
||||
mbssid = old->mbssid_ies;
|
||||
size += struct_size(new->mbssid_ies, elem, mbssid->cnt);
|
||||
if (old && old->rnr_ies) {
|
||||
rnr = old->rnr_ies;
|
||||
size += struct_size(new->rnr_ies, elem, rnr->cnt);
|
||||
}
|
||||
size += ieee80211_get_mbssid_beacon_len(mbssid, rnr,
|
||||
mbssid->cnt);
|
||||
}
|
||||
|
||||
new = kzalloc(size, GFP_KERNEL);
|
||||
|
||||
@ -1251,7 +1251,7 @@ configure_monitor:
|
||||
if (!creator_sdata) {
|
||||
struct ieee80211_sub_if_data *other;
|
||||
|
||||
list_for_each_entry(other, &local->mon_list, list) {
|
||||
list_for_each_entry_rcu(other, &local->mon_list, u.mntr.list) {
|
||||
if (!other->vif.bss_conf.mu_mimo_owner)
|
||||
continue;
|
||||
|
||||
|
||||
@ -1126,7 +1126,10 @@ again:
|
||||
|
||||
while (!ieee80211_chandef_usable(sdata, &chanreq->oper,
|
||||
IEEE80211_CHAN_DISABLED)) {
|
||||
if (WARN_ON(chanreq->oper.width == NL80211_CHAN_WIDTH_20_NOHT)) {
|
||||
if (chanreq->oper.width == NL80211_CHAN_WIDTH_20_NOHT) {
|
||||
link_id_info(sdata, link_id,
|
||||
"unusable channel (%d MHz) for connection\n",
|
||||
chanreq->oper.chan->center_freq);
|
||||
ret = -EINVAL;
|
||||
goto free;
|
||||
}
|
||||
|
||||
@ -47,6 +47,9 @@ void ieee80211_ocb_rx_no_sta(struct ieee80211_sub_if_data *sdata,
|
||||
struct sta_info *sta;
|
||||
int band;
|
||||
|
||||
if (!ifocb->joined)
|
||||
return;
|
||||
|
||||
/* XXX: Consider removing the least recently used entry and
|
||||
* allow new one to be added.
|
||||
*/
|
||||
|
||||
@ -3511,6 +3511,11 @@ ieee80211_rx_h_mgmt_check(struct ieee80211_rx_data *rx)
|
||||
rx->skb->len < IEEE80211_MIN_ACTION_SIZE)
|
||||
return RX_DROP_U_RUNT_ACTION;
|
||||
|
||||
/* Drop non-broadcast Beacon frames */
|
||||
if (ieee80211_is_beacon(mgmt->frame_control) &&
|
||||
!is_broadcast_ether_addr(mgmt->da))
|
||||
return RX_DROP;
|
||||
|
||||
if (rx->sdata->vif.type == NL80211_IFTYPE_AP &&
|
||||
ieee80211_is_beacon(mgmt->frame_control) &&
|
||||
!(rx->flags & IEEE80211_RX_BEACON_REPORTED)) {
|
||||
|
||||
@ -910,7 +910,7 @@ void __cfg80211_connect_result(struct net_device *dev,
|
||||
|
||||
ssid_len = min(ssid->datalen, IEEE80211_MAX_SSID_LEN);
|
||||
memcpy(wdev->u.client.ssid, ssid->data, ssid_len);
|
||||
wdev->u.client.ssid_len = ssid->datalen;
|
||||
wdev->u.client.ssid_len = ssid_len;
|
||||
break;
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user