Skip to content

Commit 38a4762

Browse files
committed
Merge tag 'wireless-2022-06-01' of git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless
Kalle Valo says: ==================== wireless fixes for v5.19 First set of fixes for v5.19. Build fixes for iwlwifi and libertas, a scheduling while atomic fix for rtw88 and use-after-free fix for mac80211. * tag 'wireless-2022-06-01' of git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless: wifi: mac80211: fix use-after-free in chanctx code wifi: rtw88: add a work to correct atomic scheduling warning of ::set_tim wifi: iwlwifi: pcie: rename CAUSE macro wifi: libertas: use variable-size data in assoc req/resp cmd ==================== Link: https://lore.kernel.org/r/20220601110741.90B28C385A5@smtp.kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2 parents 8d3398b + 2965c4c commit 38a4762

9 files changed

Lines changed: 39 additions & 30 deletions

File tree

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

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,7 +1090,7 @@ struct iwl_causes_list {
10901090
u8 addr;
10911091
};
10921092

1093-
#define CAUSE(reg, mask) \
1093+
#define IWL_CAUSE(reg, mask) \
10941094
{ \
10951095
.mask_reg = reg, \
10961096
.bit = ilog2(mask), \
@@ -1101,28 +1101,28 @@ struct iwl_causes_list {
11011101
}
11021102

11031103
static const struct iwl_causes_list causes_list_common[] = {
1104-
CAUSE(CSR_MSIX_FH_INT_MASK_AD, MSIX_FH_INT_CAUSES_D2S_CH0_NUM),
1105-
CAUSE(CSR_MSIX_FH_INT_MASK_AD, MSIX_FH_INT_CAUSES_D2S_CH1_NUM),
1106-
CAUSE(CSR_MSIX_FH_INT_MASK_AD, MSIX_FH_INT_CAUSES_S2D),
1107-
CAUSE(CSR_MSIX_FH_INT_MASK_AD, MSIX_FH_INT_CAUSES_FH_ERR),
1108-
CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_ALIVE),
1109-
CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_WAKEUP),
1110-
CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_RESET_DONE),
1111-
CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_CT_KILL),
1112-
CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_RF_KILL),
1113-
CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_PERIODIC),
1114-
CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_SCD),
1115-
CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_FH_TX),
1116-
CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_HW_ERR),
1117-
CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_HAP),
1104+
IWL_CAUSE(CSR_MSIX_FH_INT_MASK_AD, MSIX_FH_INT_CAUSES_D2S_CH0_NUM),
1105+
IWL_CAUSE(CSR_MSIX_FH_INT_MASK_AD, MSIX_FH_INT_CAUSES_D2S_CH1_NUM),
1106+
IWL_CAUSE(CSR_MSIX_FH_INT_MASK_AD, MSIX_FH_INT_CAUSES_S2D),
1107+
IWL_CAUSE(CSR_MSIX_FH_INT_MASK_AD, MSIX_FH_INT_CAUSES_FH_ERR),
1108+
IWL_CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_ALIVE),
1109+
IWL_CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_WAKEUP),
1110+
IWL_CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_RESET_DONE),
1111+
IWL_CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_CT_KILL),
1112+
IWL_CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_RF_KILL),
1113+
IWL_CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_PERIODIC),
1114+
IWL_CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_SCD),
1115+
IWL_CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_FH_TX),
1116+
IWL_CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_HW_ERR),
1117+
IWL_CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_HAP),
11181118
};
11191119

11201120
static const struct iwl_causes_list causes_list_pre_bz[] = {
1121-
CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_SW_ERR),
1121+
IWL_CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_SW_ERR),
11221122
};
11231123

11241124
static const struct iwl_causes_list causes_list_bz[] = {
1125-
CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_SW_ERR_BZ),
1125+
IWL_CAUSE(CSR_MSIX_HW_INT_MASK_AD, MSIX_HW_INT_CAUSES_REG_SW_ERR_BZ),
11261126
};
11271127

11281128
static void iwl_pcie_map_list(struct iwl_trans *trans,

drivers/net/wireless/marvell/libertas/cfg.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1053,7 +1053,6 @@ static int lbs_set_authtype(struct lbs_private *priv,
10531053
*/
10541054
#define LBS_ASSOC_MAX_CMD_SIZE \
10551055
(sizeof(struct cmd_ds_802_11_associate) \
1056-
- 512 /* cmd_ds_802_11_associate.iebuf */ \
10571056
+ LBS_MAX_SSID_TLV_SIZE \
10581057
+ LBS_MAX_CHANNEL_TLV_SIZE \
10591058
+ LBS_MAX_CF_PARAM_TLV_SIZE \
@@ -1130,8 +1129,7 @@ static int lbs_associate(struct lbs_private *priv,
11301129
if (sme->ie && sme->ie_len)
11311130
pos += lbs_add_wpa_tlv(pos, sme->ie, sme->ie_len);
11321131

1133-
len = (sizeof(*cmd) - sizeof(cmd->iebuf)) +
1134-
(u16)(pos - (u8 *) &cmd->iebuf);
1132+
len = sizeof(*cmd) + (u16)(pos - (u8 *) &cmd->iebuf);
11351133
cmd->hdr.size = cpu_to_le16(len);
11361134

11371135
lbs_deb_hex(LBS_DEB_ASSOC, "ASSOC_CMD", (u8 *) cmd,

drivers/net/wireless/marvell/libertas/host.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,8 @@ struct cmd_ds_802_11_associate {
528528
__le16 listeninterval;
529529
__le16 bcnperiod;
530530
u8 dtimperiod;
531-
u8 iebuf[512]; /* Enough for required and most optional IEs */
531+
/* 512 permitted - enough for required and most optional IEs */
532+
u8 iebuf[];
532533
} __packed;
533534

534535
struct cmd_ds_802_11_associate_response {
@@ -537,7 +538,8 @@ struct cmd_ds_802_11_associate_response {
537538
__le16 capability;
538539
__le16 statuscode;
539540
__le16 aid;
540-
u8 iebuf[512];
541+
/* max 512 */
542+
u8 iebuf[];
541543
} __packed;
542544

543545
struct cmd_ds_802_11_set_wep {

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1602,6 +1602,16 @@ int rtw_fw_download_rsvd_page(struct rtw_dev *rtwdev)
16021602
return ret;
16031603
}
16041604

1605+
void rtw_fw_update_beacon_work(struct work_struct *work)
1606+
{
1607+
struct rtw_dev *rtwdev = container_of(work, struct rtw_dev,
1608+
update_beacon_work);
1609+
1610+
mutex_lock(&rtwdev->mutex);
1611+
rtw_fw_download_rsvd_page(rtwdev);
1612+
mutex_unlock(&rtwdev->mutex);
1613+
}
1614+
16051615
static void rtw_fw_read_fifo_page(struct rtw_dev *rtwdev, u32 offset, u32 size,
16061616
u32 *buf, u32 residue, u16 start_pg)
16071617
{

drivers/net/wireless/realtek/rtw88/fw.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -809,6 +809,7 @@ void rtw_add_rsvd_page_pno(struct rtw_dev *rtwdev,
809809
void rtw_add_rsvd_page_sta(struct rtw_dev *rtwdev,
810810
struct rtw_vif *rtwvif);
811811
int rtw_fw_download_rsvd_page(struct rtw_dev *rtwdev);
812+
void rtw_fw_update_beacon_work(struct work_struct *work);
812813
void rtw_send_rsvd_page_h2c(struct rtw_dev *rtwdev);
813814
int rtw_dump_drv_rsvd_page(struct rtw_dev *rtwdev,
814815
u32 offset, u32 size, u32 *buf);

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -493,9 +493,7 @@ static int rtw_ops_set_tim(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
493493
{
494494
struct rtw_dev *rtwdev = hw->priv;
495495

496-
mutex_lock(&rtwdev->mutex);
497-
rtw_fw_download_rsvd_page(rtwdev);
498-
mutex_unlock(&rtwdev->mutex);
496+
ieee80211_queue_work(hw, &rtwdev->update_beacon_work);
499497

500498
return 0;
501499
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1442,6 +1442,7 @@ void rtw_core_stop(struct rtw_dev *rtwdev)
14421442
mutex_unlock(&rtwdev->mutex);
14431443

14441444
cancel_work_sync(&rtwdev->c2h_work);
1445+
cancel_work_sync(&rtwdev->update_beacon_work);
14451446
cancel_delayed_work_sync(&rtwdev->watch_dog_work);
14461447
cancel_delayed_work_sync(&coex->bt_relink_work);
14471448
cancel_delayed_work_sync(&coex->bt_reenable_work);
@@ -1998,6 +1999,7 @@ int rtw_core_init(struct rtw_dev *rtwdev)
19981999
INIT_WORK(&rtwdev->c2h_work, rtw_c2h_work);
19992000
INIT_WORK(&rtwdev->ips_work, rtw_ips_work);
20002001
INIT_WORK(&rtwdev->fw_recovery_work, rtw_fw_recovery_work);
2002+
INIT_WORK(&rtwdev->update_beacon_work, rtw_fw_update_beacon_work);
20012003
INIT_WORK(&rtwdev->ba_work, rtw_txq_ba_work);
20022004
skb_queue_head_init(&rtwdev->c2h_queue);
20032005
skb_queue_head_init(&rtwdev->coex.queue);

drivers/net/wireless/realtek/rtw88/main.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2008,6 +2008,7 @@ struct rtw_dev {
20082008
struct work_struct c2h_work;
20092009
struct work_struct ips_work;
20102010
struct work_struct fw_recovery_work;
2011+
struct work_struct update_beacon_work;
20112012

20122013
/* used to protect txqs list */
20132014
spinlock_t txq_lock;

net/mac80211/chan.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1749,12 +1749,9 @@ int ieee80211_vif_use_reserved_context(struct ieee80211_sub_if_data *sdata)
17491749

17501750
if (new_ctx->replace_state == IEEE80211_CHANCTX_REPLACE_NONE) {
17511751
if (old_ctx)
1752-
err = ieee80211_vif_use_reserved_reassign(sdata);
1753-
else
1754-
err = ieee80211_vif_use_reserved_assign(sdata);
1752+
return ieee80211_vif_use_reserved_reassign(sdata);
17551753

1756-
if (err)
1757-
return err;
1754+
return ieee80211_vif_use_reserved_assign(sdata);
17581755
}
17591756

17601757
/*

0 commit comments

Comments
 (0)