mirror of https://github.com/torvalds/linux.git
First set of fixes:
- brcmfmac: long-standing crash when used w/o P2P
- iwlwifi: fix for a use-after-free bug
- mac80211: key tailroom accounting bug could leave
allocation overhead and cause a warning
- ath11k: add a missing platform,
fix key flag operations
- bcma: skip devices disabled in OF/DT
- various (potential) memory leaks
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEpeA8sTs3M8SN2hR410qiO8sPaAAFAmj6bhMACgkQ10qiO8sP
aADvvhAAhoqDFZCZVkEneGTGd9EeLbxzsGsJ03US9a16oUu20xb3ZWtB0NuODO70
kRR8gTUqwp5p5g12MI+VMtTvtl6491sSkkVzoHnGlK2g2qMwZjC92NsLx9veKE8j
IO6szbJR/nktEpg9VouLhELF2FqCD3IunzQh1eL0GVgsJ1jAyyJ7msttbMMBV6fG
ETT7f3c0p2YSUHOJdm/QWN/vXZY9Sv8mtyT9k5IpzZI7b101b+yTQXYYRWYmi3j2
A07EQAee2SllgEKsjlWYgl7j16RarzRahG2RySkXtArYSfDo9HoxAFfgUIkZzBBh
iJKjtDi9VFtN5MgKfkM0v1Ni1/h4Y6lcIYIH/zJFqsM0V39trNpBzNYgvL0ammIQ
SN2veeYeZbckFJnj9EYpyQcBucjk+WXkgcAcbyYo1fx8+YiQw1V43tFQGa/qUi7Y
frkw5EakVM180RN8dwYkjTwojxxVqpjO/Yo+/csb2IdZqsvJe3qMaW2Uft08tz/L
H70UaHfnOtbZkb6NYnsnDfcTgs/0J25an0tarCpRsU3HJndiCq7PJDVp0hn5pVtV
DbbONM2Kk84g+gRWzqdZ/gOSzzAlLqcAhKYT/wuyGCZRSbugZqpoq17ClvzEK+eB
fBdE2TpP9aoMNEN3tDX/1M/68FcibwD7BuHPjgtzv94N7a3tWOE=
=Zi4K
-----END PGP SIGNATURE-----
Merge tag 'wireless-2025-10-23' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless
Johannes Berg says:
====================
First set of fixes:
- brcmfmac: long-standing crash when used w/o P2P
- iwlwifi: fix for a use-after-free bug
- mac80211: key tailroom accounting bug could leave
allocation overhead and cause a warning
- ath11k: add a missing platform,
fix key flag operations
- bcma: skip devices disabled in OF/DT
- various (potential) memory leaks
* tag 'wireless-2025-10-23' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless:
wifi: nl80211: call kfree without a NULL check
wifi: mac80211: fix key tailroom accounting leak
wifi: brcmfmac: fix crash while sending Action Frames in standalone AP Mode
MAINTAINERS: wcn36xx: Add linux-wireless list
bcma: don't register devices disabled in OF
wifi: mac80211: reset FILS discovery and unsol probe resp intervals
wifi: iwlwifi: fix potential use after free in iwl_mld_remove_link()
wifi: ath11k: avoid bit operation on key flags
wifi: ath12k: free skb during idr cleanup callback
wifi: ath11k: Add missing platform IDs for quirk table
wifi: ath10k: Fix memory leak on unsupported WMI command
====================
Link: https://patch.msgid.link/20251023180604.626946-3-johannes@sipsolutions.net
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
a83155cc4e
|
|
@ -21318,6 +21318,7 @@ F: drivers/media/platform/qcom/venus/
|
|||
QUALCOMM WCN36XX WIRELESS DRIVER
|
||||
M: Loic Poulain <loic.poulain@oss.qualcomm.com>
|
||||
L: wcn36xx@lists.infradead.org
|
||||
L: linux-wireless@vger.kernel.org
|
||||
S: Supported
|
||||
W: https://wireless.wiki.kernel.org/en/users/Drivers/wcn36xx
|
||||
F: drivers/net/wireless/ath/wcn36xx/
|
||||
|
|
|
|||
|
|
@ -294,6 +294,8 @@ static int bcma_register_devices(struct bcma_bus *bus)
|
|||
int err;
|
||||
|
||||
list_for_each_entry(core, &bus->cores, list) {
|
||||
struct device_node *np;
|
||||
|
||||
/* We support that core ourselves */
|
||||
switch (core->id.id) {
|
||||
case BCMA_CORE_4706_CHIPCOMMON:
|
||||
|
|
@ -311,6 +313,10 @@ static int bcma_register_devices(struct bcma_bus *bus)
|
|||
if (bcma_is_core_needed_early(core->id.id))
|
||||
continue;
|
||||
|
||||
np = core->dev.of_node;
|
||||
if (np && !of_device_is_available(np))
|
||||
continue;
|
||||
|
||||
/* Only first GMAC core on BCM4706 is connected and working */
|
||||
if (core->id.id == BCMA_CORE_4706_MAC_GBIT &&
|
||||
core->core_unit > 0)
|
||||
|
|
|
|||
|
|
@ -1937,6 +1937,7 @@ int ath10k_wmi_cmd_send(struct ath10k *ar, struct sk_buff *skb, u32 cmd_id)
|
|||
if (cmd_id == WMI_CMD_UNSUPPORTED) {
|
||||
ath10k_warn(ar, "wmi command %d is not supported by firmware\n",
|
||||
cmd_id);
|
||||
dev_kfree_skb_any(skb);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -912,42 +912,84 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
|
|||
static const struct dmi_system_id ath11k_pm_quirk_table[] = {
|
||||
{
|
||||
.driver_data = (void *)ATH11K_PM_WOW,
|
||||
.matches = {
|
||||
.matches = { /* X13 G4 AMD #1 */
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "21J3"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.driver_data = (void *)ATH11K_PM_WOW,
|
||||
.matches = { /* X13 G4 AMD #2 */
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "21J4"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.driver_data = (void *)ATH11K_PM_WOW,
|
||||
.matches = {
|
||||
.matches = { /* T14 G4 AMD #1 */
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "21K3"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.driver_data = (void *)ATH11K_PM_WOW,
|
||||
.matches = { /* T14 G4 AMD #2 */
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "21K4"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.driver_data = (void *)ATH11K_PM_WOW,
|
||||
.matches = {
|
||||
.matches = { /* P14s G4 AMD #1 */
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "21K5"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.driver_data = (void *)ATH11K_PM_WOW,
|
||||
.matches = { /* P14s G4 AMD #2 */
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "21K6"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.driver_data = (void *)ATH11K_PM_WOW,
|
||||
.matches = {
|
||||
.matches = { /* T16 G2 AMD #1 */
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "21K7"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.driver_data = (void *)ATH11K_PM_WOW,
|
||||
.matches = { /* T16 G2 AMD #2 */
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "21K8"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.driver_data = (void *)ATH11K_PM_WOW,
|
||||
.matches = {
|
||||
.matches = { /* P16s G2 AMD #1 */
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "21K9"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.driver_data = (void *)ATH11K_PM_WOW,
|
||||
.matches = { /* P16s G2 AMD #2 */
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "21KA"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.driver_data = (void *)ATH11K_PM_WOW,
|
||||
.matches = {
|
||||
.matches = { /* T14s G4 AMD #1 */
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "21F8"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.driver_data = (void *)ATH11K_PM_WOW,
|
||||
.matches = { /* T14s G4 AMD #2 */
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "21F9"),
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#include <net/mac80211.h>
|
||||
|
|
@ -4417,9 +4417,9 @@ static int ath11k_mac_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
|
|||
}
|
||||
|
||||
if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
|
||||
flags |= WMI_KEY_PAIRWISE;
|
||||
flags = WMI_KEY_PAIRWISE;
|
||||
else
|
||||
flags |= WMI_KEY_GROUP;
|
||||
flags = WMI_KEY_GROUP;
|
||||
|
||||
ath11k_dbg(ar->ab, ATH11K_DBG_MAC,
|
||||
"%s for peer %pM on vdev %d flags 0x%X, type = %d, num_sta %d\n",
|
||||
|
|
@ -4456,7 +4456,7 @@ static int ath11k_mac_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
|
|||
|
||||
is_ap_with_no_sta = (vif->type == NL80211_IFTYPE_AP &&
|
||||
!arvif->num_stations);
|
||||
if ((flags & WMI_KEY_PAIRWISE) || cmd == SET_KEY || is_ap_with_no_sta) {
|
||||
if (flags == WMI_KEY_PAIRWISE || cmd == SET_KEY || is_ap_with_no_sta) {
|
||||
ret = ath11k_install_key(arvif, key, cmd, peer_addr, flags);
|
||||
if (ret) {
|
||||
ath11k_warn(ab, "ath11k_install_key failed (%d)\n", ret);
|
||||
|
|
@ -4470,7 +4470,7 @@ static int ath11k_mac_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
|
|||
goto exit;
|
||||
}
|
||||
|
||||
if ((flags & WMI_KEY_GROUP) && cmd == SET_KEY && is_ap_with_no_sta)
|
||||
if (flags == WMI_KEY_GROUP && cmd == SET_KEY && is_ap_with_no_sta)
|
||||
arvif->reinstall_group_keys = true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8290,23 +8290,32 @@ static void ath12k_mgmt_over_wmi_tx_drop(struct ath12k *ar, struct sk_buff *skb)
|
|||
wake_up(&ar->txmgmt_empty_waitq);
|
||||
}
|
||||
|
||||
int ath12k_mac_tx_mgmt_pending_free(int buf_id, void *skb, void *ctx)
|
||||
static void ath12k_mac_tx_mgmt_free(struct ath12k *ar, int buf_id)
|
||||
{
|
||||
struct sk_buff *msdu = skb;
|
||||
struct sk_buff *msdu;
|
||||
struct ieee80211_tx_info *info;
|
||||
struct ath12k *ar = ctx;
|
||||
struct ath12k_base *ab = ar->ab;
|
||||
|
||||
spin_lock_bh(&ar->txmgmt_idr_lock);
|
||||
idr_remove(&ar->txmgmt_idr, buf_id);
|
||||
msdu = idr_remove(&ar->txmgmt_idr, buf_id);
|
||||
spin_unlock_bh(&ar->txmgmt_idr_lock);
|
||||
dma_unmap_single(ab->dev, ATH12K_SKB_CB(msdu)->paddr, msdu->len,
|
||||
|
||||
if (!msdu)
|
||||
return;
|
||||
|
||||
dma_unmap_single(ar->ab->dev, ATH12K_SKB_CB(msdu)->paddr, msdu->len,
|
||||
DMA_TO_DEVICE);
|
||||
|
||||
info = IEEE80211_SKB_CB(msdu);
|
||||
memset(&info->status, 0, sizeof(info->status));
|
||||
|
||||
ath12k_mgmt_over_wmi_tx_drop(ar, skb);
|
||||
ath12k_mgmt_over_wmi_tx_drop(ar, msdu);
|
||||
}
|
||||
|
||||
int ath12k_mac_tx_mgmt_pending_free(int buf_id, void *skb, void *ctx)
|
||||
{
|
||||
struct ath12k *ar = ctx;
|
||||
|
||||
ath12k_mac_tx_mgmt_free(ar, buf_id);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -8315,17 +8324,10 @@ static int ath12k_mac_vif_txmgmt_idr_remove(int buf_id, void *skb, void *ctx)
|
|||
{
|
||||
struct ieee80211_vif *vif = ctx;
|
||||
struct ath12k_skb_cb *skb_cb = ATH12K_SKB_CB(skb);
|
||||
struct sk_buff *msdu = skb;
|
||||
struct ath12k *ar = skb_cb->ar;
|
||||
struct ath12k_base *ab = ar->ab;
|
||||
|
||||
if (skb_cb->vif == vif) {
|
||||
spin_lock_bh(&ar->txmgmt_idr_lock);
|
||||
idr_remove(&ar->txmgmt_idr, buf_id);
|
||||
spin_unlock_bh(&ar->txmgmt_idr_lock);
|
||||
dma_unmap_single(ab->dev, skb_cb->paddr, msdu->len,
|
||||
DMA_TO_DEVICE);
|
||||
}
|
||||
if (skb_cb->vif == vif)
|
||||
ath12k_mac_tx_mgmt_free(ar, buf_id);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5627,8 +5627,7 @@ brcmf_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
|
|||
*cookie, le16_to_cpu(action_frame->len),
|
||||
le32_to_cpu(af_params->channel));
|
||||
|
||||
ack = brcmf_p2p_send_action_frame(cfg, cfg_to_ndev(cfg),
|
||||
af_params);
|
||||
ack = brcmf_p2p_send_action_frame(vif->ifp, af_params);
|
||||
|
||||
cfg80211_mgmt_tx_status(wdev, *cookie, buf, len, ack,
|
||||
GFP_KERNEL);
|
||||
|
|
|
|||
|
|
@ -1529,6 +1529,7 @@ int brcmf_p2p_notify_action_tx_complete(struct brcmf_if *ifp,
|
|||
/**
|
||||
* brcmf_p2p_tx_action_frame() - send action frame over fil.
|
||||
*
|
||||
* @ifp: interface to transmit on.
|
||||
* @p2p: p2p info struct for vif.
|
||||
* @af_params: action frame data/info.
|
||||
*
|
||||
|
|
@ -1538,12 +1539,11 @@ int brcmf_p2p_notify_action_tx_complete(struct brcmf_if *ifp,
|
|||
* The WLC_E_ACTION_FRAME_COMPLETE event will be received when the action
|
||||
* frame is transmitted.
|
||||
*/
|
||||
static s32 brcmf_p2p_tx_action_frame(struct brcmf_p2p_info *p2p,
|
||||
static s32 brcmf_p2p_tx_action_frame(struct brcmf_if *ifp,
|
||||
struct brcmf_p2p_info *p2p,
|
||||
struct brcmf_fil_af_params_le *af_params)
|
||||
{
|
||||
struct brcmf_pub *drvr = p2p->cfg->pub;
|
||||
struct brcmf_cfg80211_vif *vif;
|
||||
struct brcmf_p2p_action_frame *p2p_af;
|
||||
s32 err = 0;
|
||||
|
||||
brcmf_dbg(TRACE, "Enter\n");
|
||||
|
|
@ -1552,14 +1552,7 @@ static s32 brcmf_p2p_tx_action_frame(struct brcmf_p2p_info *p2p,
|
|||
clear_bit(BRCMF_P2P_STATUS_ACTION_TX_COMPLETED, &p2p->status);
|
||||
clear_bit(BRCMF_P2P_STATUS_ACTION_TX_NOACK, &p2p->status);
|
||||
|
||||
/* check if it is a p2p_presence response */
|
||||
p2p_af = (struct brcmf_p2p_action_frame *)af_params->action_frame.data;
|
||||
if (p2p_af->subtype == P2P_AF_PRESENCE_RSP)
|
||||
vif = p2p->bss_idx[P2PAPI_BSSCFG_CONNECTION].vif;
|
||||
else
|
||||
vif = p2p->bss_idx[P2PAPI_BSSCFG_DEVICE].vif;
|
||||
|
||||
err = brcmf_fil_bsscfg_data_set(vif->ifp, "actframe", af_params,
|
||||
err = brcmf_fil_bsscfg_data_set(ifp, "actframe", af_params,
|
||||
sizeof(*af_params));
|
||||
if (err) {
|
||||
bphy_err(drvr, " sending action frame has failed\n");
|
||||
|
|
@ -1711,16 +1704,14 @@ static bool brcmf_p2p_check_dwell_overflow(u32 requested_dwell,
|
|||
/**
|
||||
* brcmf_p2p_send_action_frame() - send action frame .
|
||||
*
|
||||
* @cfg: driver private data for cfg80211 interface.
|
||||
* @ndev: net device to transmit on.
|
||||
* @ifp: interface to transmit on.
|
||||
* @af_params: configuration data for action frame.
|
||||
*/
|
||||
bool brcmf_p2p_send_action_frame(struct brcmf_cfg80211_info *cfg,
|
||||
struct net_device *ndev,
|
||||
bool brcmf_p2p_send_action_frame(struct brcmf_if *ifp,
|
||||
struct brcmf_fil_af_params_le *af_params)
|
||||
{
|
||||
struct brcmf_cfg80211_info *cfg = ifp->drvr->config;
|
||||
struct brcmf_p2p_info *p2p = &cfg->p2p;
|
||||
struct brcmf_if *ifp = netdev_priv(ndev);
|
||||
struct brcmf_fil_action_frame_le *action_frame;
|
||||
struct brcmf_config_af_params config_af_params;
|
||||
struct afx_hdl *afx_hdl = &p2p->afx_hdl;
|
||||
|
|
@ -1857,7 +1848,7 @@ bool brcmf_p2p_send_action_frame(struct brcmf_cfg80211_info *cfg,
|
|||
if (af_params->channel)
|
||||
msleep(P2P_AF_RETRY_DELAY_TIME);
|
||||
|
||||
ack = !brcmf_p2p_tx_action_frame(p2p, af_params);
|
||||
ack = !brcmf_p2p_tx_action_frame(ifp, p2p, af_params);
|
||||
tx_retry++;
|
||||
dwell_overflow = brcmf_p2p_check_dwell_overflow(requested_dwell,
|
||||
dwell_jiffies);
|
||||
|
|
@ -2217,7 +2208,6 @@ static struct wireless_dev *brcmf_p2p_create_p2pdev(struct brcmf_p2p_info *p2p,
|
|||
|
||||
WARN_ON(p2p_ifp->bsscfgidx != bsscfgidx);
|
||||
|
||||
init_completion(&p2p->send_af_done);
|
||||
INIT_WORK(&p2p->afx_hdl.afx_work, brcmf_p2p_afx_handler);
|
||||
init_completion(&p2p->afx_hdl.act_frm_scan);
|
||||
init_completion(&p2p->wait_next_af);
|
||||
|
|
@ -2513,6 +2503,8 @@ s32 brcmf_p2p_attach(struct brcmf_cfg80211_info *cfg, bool p2pdev_forced)
|
|||
pri_ifp = brcmf_get_ifp(cfg->pub, 0);
|
||||
p2p->bss_idx[P2PAPI_BSSCFG_PRIMARY].vif = pri_ifp->vif;
|
||||
|
||||
init_completion(&p2p->send_af_done);
|
||||
|
||||
if (p2pdev_forced) {
|
||||
err_ptr = brcmf_p2p_create_p2pdev(p2p, NULL, NULL);
|
||||
if (IS_ERR(err_ptr)) {
|
||||
|
|
|
|||
|
|
@ -168,8 +168,7 @@ int brcmf_p2p_notify_action_frame_rx(struct brcmf_if *ifp,
|
|||
int brcmf_p2p_notify_action_tx_complete(struct brcmf_if *ifp,
|
||||
const struct brcmf_event_msg *e,
|
||||
void *data);
|
||||
bool brcmf_p2p_send_action_frame(struct brcmf_cfg80211_info *cfg,
|
||||
struct net_device *ndev,
|
||||
bool brcmf_p2p_send_action_frame(struct brcmf_if *ifp,
|
||||
struct brcmf_fil_af_params_le *af_params);
|
||||
bool brcmf_p2p_scan_finding_common_channel(struct brcmf_cfg80211_info *cfg,
|
||||
struct brcmf_bss_info_le *bi);
|
||||
|
|
|
|||
|
|
@ -501,6 +501,7 @@ void iwl_mld_remove_link(struct iwl_mld *mld,
|
|||
struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(bss_conf->vif);
|
||||
struct iwl_mld_link *link = iwl_mld_link_from_mac80211(bss_conf);
|
||||
bool is_deflink = link == &mld_vif->deflink;
|
||||
u8 fw_id = link->fw_id;
|
||||
|
||||
if (WARN_ON(!link || link->active))
|
||||
return;
|
||||
|
|
@ -513,10 +514,10 @@ void iwl_mld_remove_link(struct iwl_mld *mld,
|
|||
|
||||
RCU_INIT_POINTER(mld_vif->link[bss_conf->link_id], NULL);
|
||||
|
||||
if (WARN_ON(link->fw_id >= mld->fw->ucode_capa.num_links))
|
||||
if (WARN_ON(fw_id >= mld->fw->ucode_capa.num_links))
|
||||
return;
|
||||
|
||||
RCU_INIT_POINTER(mld->fw_id_to_bss_conf[link->fw_id], NULL);
|
||||
RCU_INIT_POINTER(mld->fw_id_to_bss_conf[fw_id], NULL);
|
||||
}
|
||||
|
||||
void iwl_mld_handle_missed_beacon_notif(struct iwl_mld *mld,
|
||||
|
|
|
|||
|
|
@ -1876,6 +1876,9 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev,
|
|||
link_conf->nontransmitted = false;
|
||||
link_conf->ema_ap = false;
|
||||
link_conf->bssid_indicator = 0;
|
||||
link_conf->fils_discovery.min_interval = 0;
|
||||
link_conf->fils_discovery.max_interval = 0;
|
||||
link_conf->unsol_bcast_probe_resp_interval = 0;
|
||||
|
||||
__sta_info_flush(sdata, true, link_id, NULL);
|
||||
|
||||
|
|
|
|||
|
|
@ -508,11 +508,16 @@ static int ieee80211_key_replace(struct ieee80211_sub_if_data *sdata,
|
|||
ret = ieee80211_key_enable_hw_accel(new);
|
||||
}
|
||||
} else {
|
||||
if (!new->local->wowlan)
|
||||
if (!new->local->wowlan) {
|
||||
ret = ieee80211_key_enable_hw_accel(new);
|
||||
else if (link_id < 0 || !sdata->vif.active_links ||
|
||||
BIT(link_id) & sdata->vif.active_links)
|
||||
} else if (link_id < 0 || !sdata->vif.active_links ||
|
||||
BIT(link_id) & sdata->vif.active_links) {
|
||||
new->flags |= KEY_FLAG_UPLOADED_TO_HARDWARE;
|
||||
if (!(new->conf.flags & (IEEE80211_KEY_FLAG_GENERATE_MMIC |
|
||||
IEEE80211_KEY_FLAG_PUT_MIC_SPACE |
|
||||
IEEE80211_KEY_FLAG_RESERVE_TAILROOM)))
|
||||
decrease_tailroom_need_count(sdata, 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (ret)
|
||||
|
|
|
|||
|
|
@ -4136,8 +4136,7 @@ static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info)
|
|||
rdev->wiphy.txq_quantum = old_txq_quantum;
|
||||
}
|
||||
|
||||
if (old_rts_threshold)
|
||||
kfree(old_radio_rts_threshold);
|
||||
kfree(old_radio_rts_threshold);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue