mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
We have a number of changes, but things are settling down:
* a fix in the new 6 GHz channel support
* a fix for recent minstrel (rate control) updates
for an infinite loop
* handle interface type changes better wrt. management frame
registrations (for management frames sent to userspace)
* add in-BSS RX time to survey information
* handle HW rfkill properly if !CONFIG_RFKILL
* send deauth on IBSS station expiry, to avoid state mismatches
* handle deferred crypto tailroom updates in mac80211 better
when device restart happens
* fix a spectre-v1 - really a continuation of a previous patch
* advertise NL80211_CMD_UPDATE_FT_IES as supported if so
* add some missing parsing in VHT extended NSS support
* support HE in mac80211_hwsim
* let mac80211 drivers determine the max MTU themselves
along with the usual cleanups etc.
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEH1e1rEeCd0AIMq6MB8qZga/fl8QFAl148l4ACgkQB8qZga/f
l8TafQ//Yjunnxq49ClKMDxyKwxIBvLRAMr4D3QwaWAcWUpar1/V0Ft/5glnHtbZ
7QptwbxVNUk/N68hYi8wlpMpvfzv/nShZD8QBNS1bk5E3Gng3yow03LhOx5iaYb2
KJXS1GE4jwkMD7Xn65+eMeb8rt1vEj8LleX91cguilq+y5YbcNFsP1nil2RtQyBU
cf5i8CBu4I5rTBoFaRvcz2xn+blqPSm2/piA+yXjzFp9vyVmhD+FjR5T482u48pj
wi/1zersGVUzBNElnZOKg67XPir1fcJqCfLILr7okPItWuYXHdVHGfn+arhimK4W
dyIpv1EfCe0lwKl4VTdhXt1GwhKvWCc2Ja7lz/RnDisGq9CYPJNfW7jFgR3tw4eg
SccnUhnxRIgD1V2KDcvsRadPo+2YsBJBmC61JRX1K6L3zpHLbktDyzxvTwCeVQ9A
TQp5bmQcKqDoq+/60JNHI6IxMbmX/vc2PC7dENGWUkem/JEmSWBB1wcL9gsRkhVi
c4uHyvFeXJaIV7YFA36hWCfa0fr+UUYxfzxudRSvxq/tTpayqBKu6fr3Pvv0SqTj
/BKkezoIdJntClhJv4PcDkZMva4uMCPtHCero9eICX5J+4AanD6caRNefX6L0PfF
DtN1sscVOy9zY2fV4tqvn3IASmOE5yB/dxjtKkMYyNHkZsGiDI0=
=HAuT
-----END PGP SIGNATURE-----
Merge tag 'mac80211-next-for-davem-2019-09-11' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
Johannes Berg says:
====================
We have a number of changes, but things are settling down:
* a fix in the new 6 GHz channel support
* a fix for recent minstrel (rate control) updates
for an infinite loop
* handle interface type changes better wrt. management frame
registrations (for management frames sent to userspace)
* add in-BSS RX time to survey information
* handle HW rfkill properly if !CONFIG_RFKILL
* send deauth on IBSS station expiry, to avoid state mismatches
* handle deferred crypto tailroom updates in mac80211 better
when device restart happens
* fix a spectre-v1 - really a continuation of a previous patch
* advertise NL80211_CMD_UPDATE_FT_IES as supported if so
* add some missing parsing in VHT extended NSS support
* support HE in mac80211_hwsim
* let mac80211 drivers determine the max MTU themselves
along with the usual cleanups etc.
====================
Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
commit
c1b3ddf7c3
19 changed files with 274 additions and 161 deletions
|
|
@ -1252,6 +1252,7 @@ void ieee80211_ibss_rx_no_sta(struct ieee80211_sub_if_data *sdata,
|
|||
|
||||
static void ieee80211_ibss_sta_expire(struct ieee80211_sub_if_data *sdata)
|
||||
{
|
||||
struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
struct sta_info *sta, *tmp;
|
||||
unsigned long exp_time = IEEE80211_IBSS_INACTIVITY_LIMIT;
|
||||
|
|
@ -1268,10 +1269,17 @@ static void ieee80211_ibss_sta_expire(struct ieee80211_sub_if_data *sdata)
|
|||
if (time_is_before_jiffies(last_active + exp_time) ||
|
||||
(time_is_before_jiffies(last_active + exp_rsn) &&
|
||||
sta->sta_state != IEEE80211_STA_AUTHORIZED)) {
|
||||
u8 frame_buf[IEEE80211_DEAUTH_FRAME_LEN];
|
||||
|
||||
sta_dbg(sta->sdata, "expiring inactive %sSTA %pM\n",
|
||||
sta->sta_state != IEEE80211_STA_AUTHORIZED ?
|
||||
"not authorized " : "", sta->sta.addr);
|
||||
|
||||
ieee80211_send_deauth_disassoc(sdata, sta->sta.addr,
|
||||
ifibss->bssid,
|
||||
IEEE80211_STYPE_DEAUTH,
|
||||
WLAN_REASON_DEAUTH_LEAVING,
|
||||
true, frame_buf);
|
||||
WARN_ON(__sta_info_destroy(sta));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2099,7 +2099,8 @@ void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata,
|
|||
const u8 *da, const u8 *key, u8 key_len, u8 key_idx,
|
||||
u32 tx_flags);
|
||||
void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata,
|
||||
const u8 *bssid, u16 stype, u16 reason,
|
||||
const u8 *da, const u8 *bssid,
|
||||
u16 stype, u16 reason,
|
||||
bool send_frame, u8 *frame_buf);
|
||||
|
||||
enum {
|
||||
|
|
|
|||
|
|
@ -1876,7 +1876,7 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name,
|
|||
|
||||
/* MTU range: 256 - 2304 */
|
||||
ndev->min_mtu = 256;
|
||||
ndev->max_mtu = IEEE80211_MAX_DATA_LEN;
|
||||
ndev->max_mtu = local->hw.max_mtu;
|
||||
|
||||
ret = register_netdevice(ndev);
|
||||
if (ret) {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
* Copyright 2007-2008 Johannes Berg <johannes@sipsolutions.net>
|
||||
* Copyright 2013-2014 Intel Mobile Communications GmbH
|
||||
* Copyright 2015-2017 Intel Deutschland GmbH
|
||||
* Copyright 2018-2019 Intel Corporation
|
||||
*/
|
||||
|
||||
#include <linux/if_ether.h>
|
||||
|
|
@ -781,9 +782,8 @@ int ieee80211_key_link(struct ieee80211_key *key,
|
|||
/* The rekey code assumes that the old and new key are using
|
||||
* the same cipher. Enforce the assumption for pairwise keys.
|
||||
*/
|
||||
if (key &&
|
||||
((alt_key && alt_key->conf.cipher != key->conf.cipher) ||
|
||||
(old_key && old_key->conf.cipher != key->conf.cipher)))
|
||||
if ((alt_key && alt_key->conf.cipher != key->conf.cipher) ||
|
||||
(old_key && old_key->conf.cipher != key->conf.cipher))
|
||||
goto out;
|
||||
} else if (sta) {
|
||||
old_key = key_mtx_dereference(sdata->local, sta->gtk[idx]);
|
||||
|
|
@ -793,7 +793,7 @@ int ieee80211_key_link(struct ieee80211_key *key,
|
|||
|
||||
/* Non-pairwise keys must also not switch the cipher on rekey */
|
||||
if (!pairwise) {
|
||||
if (key && old_key && old_key->conf.cipher != key->conf.cipher)
|
||||
if (old_key && old_key->conf.cipher != key->conf.cipher)
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
@ -843,46 +843,30 @@ void ieee80211_key_free(struct ieee80211_key *key, bool delay_tailroom)
|
|||
ieee80211_key_destroy(key, delay_tailroom);
|
||||
}
|
||||
|
||||
void ieee80211_enable_keys(struct ieee80211_sub_if_data *sdata)
|
||||
void ieee80211_reenable_keys(struct ieee80211_sub_if_data *sdata)
|
||||
{
|
||||
struct ieee80211_key *key;
|
||||
struct ieee80211_sub_if_data *vlan;
|
||||
|
||||
ASSERT_RTNL();
|
||||
|
||||
if (WARN_ON(!ieee80211_sdata_running(sdata)))
|
||||
return;
|
||||
|
||||
mutex_lock(&sdata->local->key_mtx);
|
||||
|
||||
WARN_ON_ONCE(sdata->crypto_tx_tailroom_needed_cnt ||
|
||||
sdata->crypto_tx_tailroom_pending_dec);
|
||||
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP) {
|
||||
list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
|
||||
WARN_ON_ONCE(vlan->crypto_tx_tailroom_needed_cnt ||
|
||||
vlan->crypto_tx_tailroom_pending_dec);
|
||||
}
|
||||
|
||||
list_for_each_entry(key, &sdata->key_list, list) {
|
||||
increment_tailroom_need_count(sdata);
|
||||
ieee80211_key_enable_hw_accel(key);
|
||||
}
|
||||
|
||||
mutex_unlock(&sdata->local->key_mtx);
|
||||
}
|
||||
|
||||
void ieee80211_reset_crypto_tx_tailroom(struct ieee80211_sub_if_data *sdata)
|
||||
{
|
||||
struct ieee80211_sub_if_data *vlan;
|
||||
|
||||
mutex_lock(&sdata->local->key_mtx);
|
||||
|
||||
sdata->crypto_tx_tailroom_needed_cnt = 0;
|
||||
sdata->crypto_tx_tailroom_pending_dec = 0;
|
||||
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP) {
|
||||
list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
|
||||
list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) {
|
||||
vlan->crypto_tx_tailroom_needed_cnt = 0;
|
||||
vlan->crypto_tx_tailroom_pending_dec = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (ieee80211_sdata_running(sdata)) {
|
||||
list_for_each_entry(key, &sdata->key_list, list) {
|
||||
increment_tailroom_need_count(sdata);
|
||||
ieee80211_key_enable_hw_accel(key);
|
||||
}
|
||||
}
|
||||
|
||||
mutex_unlock(&sdata->local->key_mtx);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
/*
|
||||
* Copyright 2002-2004, Instant802 Networks, Inc.
|
||||
* Copyright 2005, Devicescape Software, Inc.
|
||||
* Copyright (C) 2019 Intel Corporation
|
||||
*/
|
||||
|
||||
#ifndef IEEE80211_KEY_H
|
||||
|
|
@ -156,8 +157,7 @@ void ieee80211_free_keys(struct ieee80211_sub_if_data *sdata,
|
|||
bool force_synchronize);
|
||||
void ieee80211_free_sta_keys(struct ieee80211_local *local,
|
||||
struct sta_info *sta);
|
||||
void ieee80211_enable_keys(struct ieee80211_sub_if_data *sdata);
|
||||
void ieee80211_reset_crypto_tx_tailroom(struct ieee80211_sub_if_data *sdata);
|
||||
void ieee80211_reenable_keys(struct ieee80211_sub_if_data *sdata);
|
||||
|
||||
#define key_mtx_dereference(local, ref) \
|
||||
rcu_dereference_protected(ref, lockdep_is_held(&((local)->key_mtx)))
|
||||
|
|
|
|||
|
|
@ -639,6 +639,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_nm(size_t priv_data_len,
|
|||
IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH;
|
||||
local->hw.uapsd_queues = IEEE80211_DEFAULT_UAPSD_QUEUES;
|
||||
local->hw.uapsd_max_sp_len = IEEE80211_DEFAULT_MAX_SP_LEN;
|
||||
local->hw.max_mtu = IEEE80211_MAX_DATA_LEN;
|
||||
local->user_power_level = IEEE80211_UNSET_POWER_LEVEL;
|
||||
wiphy->ht_capa_mod_mask = &mac80211_ht_capa_mod_mask;
|
||||
wiphy->vht_capa_mod_mask = &mac80211_vht_capa_mod_mask;
|
||||
|
|
|
|||
|
|
@ -2278,8 +2278,9 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
|
|||
!ifmgd->have_beacon)
|
||||
drv_mgd_prepare_tx(sdata->local, sdata, 0);
|
||||
|
||||
ieee80211_send_deauth_disassoc(sdata, ifmgd->bssid, stype,
|
||||
reason, tx, frame_buf);
|
||||
ieee80211_send_deauth_disassoc(sdata, ifmgd->bssid,
|
||||
ifmgd->bssid, stype, reason,
|
||||
tx, frame_buf);
|
||||
}
|
||||
|
||||
/* flush out frame - make sure the deauth was actually sent */
|
||||
|
|
@ -4509,7 +4510,7 @@ void ieee80211_mgd_quiesce(struct ieee80211_sub_if_data *sdata)
|
|||
* cfg80211 won't know and won't actually abort those attempts,
|
||||
* thus we need to do that ourselves.
|
||||
*/
|
||||
ieee80211_send_deauth_disassoc(sdata, bssid,
|
||||
ieee80211_send_deauth_disassoc(sdata, bssid, bssid,
|
||||
IEEE80211_STYPE_DEAUTH,
|
||||
WLAN_REASON_DEAUTH_LEAVING,
|
||||
false, frame_buf);
|
||||
|
|
@ -5296,7 +5297,7 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
|
|||
ifmgd->flags |= IEEE80211_STA_DISABLE_VHT;
|
||||
ifmgd->flags |= IEEE80211_STA_DISABLE_HE;
|
||||
netdev_info(sdata->dev,
|
||||
"disabling HE/HT/VHT due to WEP/TKIP use\n");
|
||||
"disabling HT/VHT/HE due to WEP/TKIP use\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -5550,7 +5551,7 @@ int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata,
|
|||
ieee80211_get_reason_code_string(req->reason_code));
|
||||
|
||||
drv_mgd_prepare_tx(sdata->local, sdata, 0);
|
||||
ieee80211_send_deauth_disassoc(sdata, req->bssid,
|
||||
ieee80211_send_deauth_disassoc(sdata, req->bssid, req->bssid,
|
||||
IEEE80211_STYPE_DEAUTH,
|
||||
req->reason_code, tx,
|
||||
frame_buf);
|
||||
|
|
@ -5570,7 +5571,7 @@ int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata,
|
|||
ieee80211_get_reason_code_string(req->reason_code));
|
||||
|
||||
drv_mgd_prepare_tx(sdata->local, sdata, 0);
|
||||
ieee80211_send_deauth_disassoc(sdata, req->bssid,
|
||||
ieee80211_send_deauth_disassoc(sdata, req->bssid, req->bssid,
|
||||
IEEE80211_STYPE_DEAUTH,
|
||||
req->reason_code, tx,
|
||||
frame_buf);
|
||||
|
|
|
|||
|
|
@ -634,7 +634,7 @@ minstrel_ht_rate_sample_switch(struct minstrel_priv *mp,
|
|||
u16 supported = mi->supported[g_idx];
|
||||
|
||||
supported >>= mi->max_tp_rate[0] % MCS_GROUP_RATES;
|
||||
for (i = 0; supported; i++) {
|
||||
for (i = 0; supported; supported >>= 1, i++) {
|
||||
if (!(supported & 1))
|
||||
continue;
|
||||
|
||||
|
|
|
|||
|
|
@ -1583,7 +1583,8 @@ void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata,
|
|||
}
|
||||
|
||||
void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata,
|
||||
const u8 *bssid, u16 stype, u16 reason,
|
||||
const u8 *da, const u8 *bssid,
|
||||
u16 stype, u16 reason,
|
||||
bool send_frame, u8 *frame_buf)
|
||||
{
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
|
|
@ -1594,7 +1595,7 @@ void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata,
|
|||
mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | stype);
|
||||
mgmt->duration = 0; /* initialize only */
|
||||
mgmt->seq_ctrl = 0; /* initialize only */
|
||||
memcpy(mgmt->da, bssid, ETH_ALEN);
|
||||
memcpy(mgmt->da, da, ETH_ALEN);
|
||||
memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN);
|
||||
memcpy(mgmt->bssid, bssid, ETH_ALEN);
|
||||
/* u.deauth.reason_code == u.disassoc.reason_code */
|
||||
|
|
@ -2420,11 +2421,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
|
|||
|
||||
/* add back keys */
|
||||
list_for_each_entry(sdata, &local->interfaces, list)
|
||||
ieee80211_reset_crypto_tx_tailroom(sdata);
|
||||
|
||||
list_for_each_entry(sdata, &local->interfaces, list)
|
||||
if (ieee80211_sdata_running(sdata))
|
||||
ieee80211_enable_keys(sdata);
|
||||
ieee80211_reenable_keys(sdata);
|
||||
|
||||
/* Reconfigure sched scan if it was interrupted by FW restart */
|
||||
mutex_lock(&local->mtx);
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* Portions of this file
|
||||
* Copyright(c) 2015 - 2016 Intel Deutschland GmbH
|
||||
* Copyright (C) 2018 Intel Corporation
|
||||
* Copyright (C) 2018 - 2019 Intel Corporation
|
||||
*/
|
||||
|
||||
#include <linux/ieee80211.h>
|
||||
|
|
@ -349,6 +349,14 @@ enum ieee80211_sta_rx_bandwidth ieee80211_sta_cap_rx_bw(struct sta_info *sta)
|
|||
cap_width == IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ)
|
||||
return IEEE80211_STA_RX_BW_160;
|
||||
|
||||
/*
|
||||
* If this is non-zero, then it does support 160 MHz after all,
|
||||
* in one form or the other. We don't distinguish here (or even
|
||||
* above) between 160 and 80+80 yet.
|
||||
*/
|
||||
if (vht_cap->cap & IEEE80211_VHT_CAP_EXT_NSS_BW_MASK)
|
||||
return IEEE80211_STA_RX_BW_160;
|
||||
|
||||
return IEEE80211_STA_RX_BW_80;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue