Commit 5abab498 authored by David S. Miller's avatar David S. Miller

Merge tag 'wireless-drivers-2021-10-01' of...

Merge tag 'wireless-drivers-2021-10-01' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers

wireless-drivers fixes for v5.15

Second set of fixes for v5.15, nothing major this time. Most important
here are reverting a brcmfmac regression and a fix for an old rare
ath5k build error.

iwlwifi

* fixes to NULL dereference, off by one and missing unlock

* add support for Killer AX1650 on Dell XPS 15 (9510) laptop

ath5k

* build fix with LEDS=m

brcmfmac

* revert a regression causing BCM4359/9 devices stop working as access point

mwifiex

* fix clang warning about null pointer arithmetic
parents ca6e11c3 603a1621
...@@ -971,6 +971,7 @@ D: PowerPC ...@@ -971,6 +971,7 @@ D: PowerPC
N: Daniel Drake N: Daniel Drake
E: dsd@gentoo.org E: dsd@gentoo.org
D: USBAT02 CompactFlash support in usb-storage D: USBAT02 CompactFlash support in usb-storage
D: ZD1211RW wireless driver
S: UK S: UK
N: Oleg Drokin N: Oleg Drokin
......
...@@ -17793,7 +17793,6 @@ F: drivers/staging/nvec/ ...@@ -17793,7 +17793,6 @@ F: drivers/staging/nvec/
STAGING - OLPC SECONDARY DISPLAY CONTROLLER (DCON) STAGING - OLPC SECONDARY DISPLAY CONTROLLER (DCON)
M: Jens Frederich <jfrederich@gmail.com> M: Jens Frederich <jfrederich@gmail.com>
M: Daniel Drake <dsd@laptop.org>
M: Jon Nettleton <jon.nettleton@gmail.com> M: Jon Nettleton <jon.nettleton@gmail.com>
S: Maintained S: Maintained
W: http://wiki.laptop.org/go/DCON W: http://wiki.laptop.org/go/DCON
...@@ -20698,7 +20697,6 @@ S: Maintained ...@@ -20698,7 +20697,6 @@ S: Maintained
F: mm/zbud.c F: mm/zbud.c
ZD1211RW WIRELESS DRIVER ZD1211RW WIRELESS DRIVER
M: Daniel Drake <dsd@gentoo.org>
M: Ulrich Kunitz <kune@deine-taler.de> M: Ulrich Kunitz <kune@deine-taler.de>
L: linux-wireless@vger.kernel.org L: linux-wireless@vger.kernel.org
L: zd1211-devs@lists.sourceforge.net (subscribers-only) L: zd1211-devs@lists.sourceforge.net (subscribers-only)
......
...@@ -3,9 +3,7 @@ config ATH5K ...@@ -3,9 +3,7 @@ config ATH5K
tristate "Atheros 5xxx wireless cards support" tristate "Atheros 5xxx wireless cards support"
depends on (PCI || ATH25) && MAC80211 depends on (PCI || ATH25) && MAC80211
select ATH_COMMON select ATH_COMMON
select MAC80211_LEDS select MAC80211_LEDS if LEDS_CLASS=y || LEDS_CLASS=MAC80211
select LEDS_CLASS
select NEW_LEDS
select ATH5K_AHB if ATH25 select ATH5K_AHB if ATH25
select ATH5K_PCI if !ATH25 select ATH5K_PCI if !ATH25
help help
......
...@@ -89,7 +89,8 @@ static const struct pci_device_id ath5k_led_devices[] = { ...@@ -89,7 +89,8 @@ static const struct pci_device_id ath5k_led_devices[] = {
void ath5k_led_enable(struct ath5k_hw *ah) void ath5k_led_enable(struct ath5k_hw *ah)
{ {
if (test_bit(ATH_STAT_LEDSOFT, ah->status)) { if (IS_ENABLED(CONFIG_MAC80211_LEDS) &&
test_bit(ATH_STAT_LEDSOFT, ah->status)) {
ath5k_hw_set_gpio_output(ah, ah->led_pin); ath5k_hw_set_gpio_output(ah, ah->led_pin);
ath5k_led_off(ah); ath5k_led_off(ah);
} }
...@@ -104,7 +105,8 @@ static void ath5k_led_on(struct ath5k_hw *ah) ...@@ -104,7 +105,8 @@ static void ath5k_led_on(struct ath5k_hw *ah)
void ath5k_led_off(struct ath5k_hw *ah) void ath5k_led_off(struct ath5k_hw *ah)
{ {
if (!test_bit(ATH_STAT_LEDSOFT, ah->status)) if (!IS_ENABLED(CONFIG_MAC80211_LEDS) ||
!test_bit(ATH_STAT_LEDSOFT, ah->status))
return; return;
ath5k_hw_set_gpio(ah, ah->led_pin, !ah->led_on); ath5k_hw_set_gpio(ah, ah->led_pin, !ah->led_on);
} }
...@@ -146,7 +148,7 @@ ath5k_register_led(struct ath5k_hw *ah, struct ath5k_led *led, ...@@ -146,7 +148,7 @@ ath5k_register_led(struct ath5k_hw *ah, struct ath5k_led *led,
static void static void
ath5k_unregister_led(struct ath5k_led *led) ath5k_unregister_led(struct ath5k_led *led)
{ {
if (!led->ah) if (!IS_ENABLED(CONFIG_MAC80211_LEDS) || !led->ah)
return; return;
led_classdev_unregister(&led->led_dev); led_classdev_unregister(&led->led_dev);
ath5k_led_off(led->ah); ath5k_led_off(led->ah);
...@@ -169,7 +171,7 @@ int ath5k_init_leds(struct ath5k_hw *ah) ...@@ -169,7 +171,7 @@ int ath5k_init_leds(struct ath5k_hw *ah)
char name[ATH5K_LED_MAX_NAME_LEN + 1]; char name[ATH5K_LED_MAX_NAME_LEN + 1];
const struct pci_device_id *match; const struct pci_device_id *match;
if (!ah->pdev) if (!IS_ENABLED(CONFIG_MAC80211_LEDS) || !ah->pdev)
return 0; return 0;
#ifdef CONFIG_ATH5K_AHB #ifdef CONFIG_ATH5K_AHB
......
...@@ -7463,23 +7463,18 @@ static s32 brcmf_translate_country_code(struct brcmf_pub *drvr, char alpha2[2], ...@@ -7463,23 +7463,18 @@ static s32 brcmf_translate_country_code(struct brcmf_pub *drvr, char alpha2[2],
s32 found_index; s32 found_index;
int i; int i;
country_codes = drvr->settings->country_codes;
if (!country_codes) {
brcmf_dbg(TRACE, "No country codes configured for device\n");
return -EINVAL;
}
if ((alpha2[0] == ccreq->country_abbrev[0]) && if ((alpha2[0] == ccreq->country_abbrev[0]) &&
(alpha2[1] == ccreq->country_abbrev[1])) { (alpha2[1] == ccreq->country_abbrev[1])) {
brcmf_dbg(TRACE, "Country code already set\n"); brcmf_dbg(TRACE, "Country code already set\n");
return -EAGAIN; return -EAGAIN;
} }
country_codes = drvr->settings->country_codes;
if (!country_codes) {
brcmf_dbg(TRACE, "No country codes configured for device, using ISO3166 code and 0 rev\n");
memset(ccreq, 0, sizeof(*ccreq));
ccreq->country_abbrev[0] = alpha2[0];
ccreq->country_abbrev[1] = alpha2[1];
ccreq->ccode[0] = alpha2[0];
ccreq->ccode[1] = alpha2[1];
return 0;
}
found_index = -1; found_index = -1;
for (i = 0; i < country_codes->table_size; i++) { for (i = 0; i < country_codes->table_size; i++) {
cc = &country_codes->table[i]; cc = &country_codes->table[i];
......
...@@ -160,6 +160,7 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw, ...@@ -160,6 +160,7 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw,
mvm->ptk_icvlen = key->icv_len; mvm->ptk_icvlen = key->icv_len;
mvm->gtk_ivlen = key->iv_len; mvm->gtk_ivlen = key->iv_len;
mvm->gtk_icvlen = key->icv_len; mvm->gtk_icvlen = key->icv_len;
mutex_unlock(&mvm->mutex);
/* don't upload key again */ /* don't upload key again */
return; return;
...@@ -360,11 +361,11 @@ static void iwl_mvm_wowlan_get_rsc_v5_data(struct ieee80211_hw *hw, ...@@ -360,11 +361,11 @@ static void iwl_mvm_wowlan_get_rsc_v5_data(struct ieee80211_hw *hw,
if (sta) { if (sta) {
rsc = data->rsc->ucast_rsc; rsc = data->rsc->ucast_rsc;
} else { } else {
if (WARN_ON(data->gtks > ARRAY_SIZE(data->gtk_ids))) if (WARN_ON(data->gtks >= ARRAY_SIZE(data->gtk_ids)))
return; return;
data->gtk_ids[data->gtks] = key->keyidx; data->gtk_ids[data->gtks] = key->keyidx;
rsc = data->rsc->mcast_rsc[data->gtks % 2]; rsc = data->rsc->mcast_rsc[data->gtks % 2];
if (WARN_ON(key->keyidx > if (WARN_ON(key->keyidx >=
ARRAY_SIZE(data->rsc->mcast_key_id_map))) ARRAY_SIZE(data->rsc->mcast_key_id_map)))
return; return;
data->rsc->mcast_key_id_map[key->keyidx] = data->gtks % 2; data->rsc->mcast_key_id_map[key->keyidx] = data->gtks % 2;
......
...@@ -662,12 +662,13 @@ static bool __iwl_mvm_remove_time_event(struct iwl_mvm *mvm, ...@@ -662,12 +662,13 @@ static bool __iwl_mvm_remove_time_event(struct iwl_mvm *mvm,
u32 *uid) u32 *uid)
{ {
u32 id; u32 id;
struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(te_data->vif); struct iwl_mvm_vif *mvmvif;
enum nl80211_iftype iftype; enum nl80211_iftype iftype;
if (!te_data->vif) if (!te_data->vif)
return false; return false;
mvmvif = iwl_mvm_vif_from_mac80211(te_data->vif);
iftype = te_data->vif->type; iftype = te_data->vif->type;
/* /*
......
...@@ -547,6 +547,8 @@ static const struct iwl_dev_info iwl_dev_info_table[] = { ...@@ -547,6 +547,8 @@ static const struct iwl_dev_info iwl_dev_info_table[] = {
IWL_DEV_INFO(0x43F0, 0x0074, iwl_ax201_cfg_qu_hr, NULL), IWL_DEV_INFO(0x43F0, 0x0074, iwl_ax201_cfg_qu_hr, NULL),
IWL_DEV_INFO(0x43F0, 0x0078, iwl_ax201_cfg_qu_hr, NULL), IWL_DEV_INFO(0x43F0, 0x0078, iwl_ax201_cfg_qu_hr, NULL),
IWL_DEV_INFO(0x43F0, 0x007C, iwl_ax201_cfg_qu_hr, NULL), IWL_DEV_INFO(0x43F0, 0x007C, iwl_ax201_cfg_qu_hr, NULL),
IWL_DEV_INFO(0x43F0, 0x1651, killer1650s_2ax_cfg_qu_b0_hr_b0, iwl_ax201_killer_1650s_name),
IWL_DEV_INFO(0x43F0, 0x1652, killer1650i_2ax_cfg_qu_b0_hr_b0, iwl_ax201_killer_1650i_name),
IWL_DEV_INFO(0x43F0, 0x2074, iwl_ax201_cfg_qu_hr, NULL), IWL_DEV_INFO(0x43F0, 0x2074, iwl_ax201_cfg_qu_hr, NULL),
IWL_DEV_INFO(0x43F0, 0x4070, iwl_ax201_cfg_qu_hr, NULL), IWL_DEV_INFO(0x43F0, 0x4070, iwl_ax201_cfg_qu_hr, NULL),
IWL_DEV_INFO(0xA0F0, 0x0070, iwl_ax201_cfg_qu_hr, NULL), IWL_DEV_INFO(0xA0F0, 0x0070, iwl_ax201_cfg_qu_hr, NULL),
......
...@@ -62,8 +62,8 @@ void *mwifiex_process_sta_txpd(struct mwifiex_private *priv, ...@@ -62,8 +62,8 @@ void *mwifiex_process_sta_txpd(struct mwifiex_private *priv,
pkt_type = mwifiex_is_skb_mgmt_frame(skb) ? PKT_TYPE_MGMT : 0; pkt_type = mwifiex_is_skb_mgmt_frame(skb) ? PKT_TYPE_MGMT : 0;
pad = ((void *)skb->data - (sizeof(*local_tx_pd) + hroom)- pad = ((uintptr_t)skb->data - (sizeof(*local_tx_pd) + hroom)) &
NULL) & (MWIFIEX_DMA_ALIGN_SZ - 1); (MWIFIEX_DMA_ALIGN_SZ - 1);
skb_push(skb, sizeof(*local_tx_pd) + pad); skb_push(skb, sizeof(*local_tx_pd) + pad);
local_tx_pd = (struct txpd *) skb->data; local_tx_pd = (struct txpd *) skb->data;
......
...@@ -475,8 +475,8 @@ void *mwifiex_process_uap_txpd(struct mwifiex_private *priv, ...@@ -475,8 +475,8 @@ void *mwifiex_process_uap_txpd(struct mwifiex_private *priv,
pkt_type = mwifiex_is_skb_mgmt_frame(skb) ? PKT_TYPE_MGMT : 0; pkt_type = mwifiex_is_skb_mgmt_frame(skb) ? PKT_TYPE_MGMT : 0;
pad = ((void *)skb->data - (sizeof(*txpd) + hroom) - NULL) & pad = ((uintptr_t)skb->data - (sizeof(*txpd) + hroom)) &
(MWIFIEX_DMA_ALIGN_SZ - 1); (MWIFIEX_DMA_ALIGN_SZ - 1);
skb_push(skb, sizeof(*txpd) + pad); skb_push(skb, sizeof(*txpd) + pad);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment