PKG_NAME:=mac80211
-PKG_VERSION:=4.19.189-1
+PKG_VERSION:=4.19.193-1
PKG_RELEASE:=1
-PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v4.19.189/
-PKG_HASH:=34a53f743b43cbb25c8e665c3932d8cdd79aa3c081b9e573fae63b5a7407422c
+PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v4.19.193/
+PKG_HASH:=560c0ce9e4079fd26d046e188453e008a5e766e5409d950c4749a23da53d6d0a
PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION)
{
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
-@@ -3996,6 +3996,8 @@ static const struct wmi_ops wmi_tlv_ops
+@@ -3999,6 +3999,8 @@ static const struct wmi_ops wmi_tlv_ops
.gen_echo = ath10k_wmi_tlv_op_gen_echo,
.gen_vdev_spectral_conf = ath10k_wmi_tlv_op_gen_vdev_spectral_conf,
.gen_vdev_spectral_enable = ath10k_wmi_tlv_op_gen_vdev_spectral_enable,
--- a/drivers/net/wireless/marvell/mwl8k.c
+++ b/drivers/net/wireless/marvell/mwl8k.c
-@@ -5691,6 +5691,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw")
+@@ -5692,6 +5692,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw")
MODULE_FIRMWARE(MWL8K_8366_AP_FW(MWL8K_8366_AP_FW_API));
static const struct pci_device_id mwl8k_pci_id_table[] = {
--- a/drivers/net/wireless/marvell/mwl8k.c
+++ b/drivers/net/wireless/marvell/mwl8k.c
-@@ -6276,6 +6276,8 @@ static int mwl8k_probe(struct pci_dev *p
+@@ -6277,6 +6277,8 @@ static int mwl8k_probe(struct pci_dev *p
priv->running_bsses = 0;
return rc;
err_stop_firmware:
-@@ -6309,8 +6311,6 @@ static void mwl8k_remove(struct pci_dev
+@@ -6310,8 +6312,6 @@ static void mwl8k_remove(struct pci_dev
return;
priv = hw->priv;
#endif /* AES_GCM_H */
--- a/net/mac80211/wpa.c
+++ b/net/mac80211/wpa.c
-@@ -314,7 +314,8 @@ ieee80211_crypto_tkip_decrypt(struct iee
+@@ -315,7 +315,8 @@ ieee80211_crypto_tkip_decrypt(struct iee
}
{
__le16 mask_fc;
int a4_included, mgmt;
-@@ -344,14 +345,8 @@ static void ccmp_special_blocks(struct s
+@@ -345,14 +346,8 @@ static void ccmp_special_blocks(struct s
else
qos_tid = 0;
/* Nonce: Nonce Flags | A2 | PN
* Nonce Flags: Priority (b0..b3) | Management (b4) | Reserved (b5..b7)
-@@ -359,6 +354,8 @@ static void ccmp_special_blocks(struct s
+@@ -360,6 +355,8 @@ static void ccmp_special_blocks(struct s
b_0[1] = qos_tid | (mgmt << 4);
memcpy(&b_0[2], hdr->addr2, ETH_ALEN);
memcpy(&b_0[8], pn, IEEE80211_CCMP_PN_LEN);
/* AAD (extra authenticate-only data) / masked 802.11 header
* FC | A1 | A2 | A3 | SC | [A4] | [QC] */
-@@ -415,7 +412,7 @@ static int ccmp_encrypt_skb(struct ieee8
+@@ -416,7 +413,7 @@ static int ccmp_encrypt_skb(struct ieee8
u8 *pos;
u8 pn[6];
u64 pn64;
u8 b_0[AES_BLOCK_SIZE];
if (info->control.hw_key &&
-@@ -470,9 +467,11 @@ static int ccmp_encrypt_skb(struct ieee8
+@@ -471,9 +468,11 @@ static int ccmp_encrypt_skb(struct ieee8
return 0;
pos += IEEE80211_CCMP_HDR_LEN;
}
-@@ -545,13 +544,13 @@ ieee80211_crypto_ccmp_decrypt(struct iee
+@@ -546,13 +545,13 @@ ieee80211_crypto_ccmp_decrypt(struct iee
u8 aad[2 * AES_BLOCK_SIZE];
u8 b_0[AES_BLOCK_SIZE];
/* hardware didn't decrypt/verify MIC */
return RX_DROP_UNUSABLE;
}
-@@ -646,7 +645,7 @@ static int gcmp_encrypt_skb(struct ieee8
+@@ -649,7 +648,7 @@ static int gcmp_encrypt_skb(struct ieee8
u8 *pos;
u8 pn[6];
u64 pn64;
u8 j_0[AES_BLOCK_SIZE];
if (info->control.hw_key &&
-@@ -703,8 +702,10 @@ static int gcmp_encrypt_skb(struct ieee8
+@@ -706,8 +705,10 @@ static int gcmp_encrypt_skb(struct ieee8
pos += IEEE80211_GCMP_HDR_LEN;
gcmp_special_blocks(skb, pn, j_0, aad);
}
ieee80211_tx_result
-@@ -1127,9 +1128,9 @@ ieee80211_crypto_aes_gmac_encrypt(struct
+@@ -1132,9 +1133,9 @@ ieee80211_crypto_aes_gmac_encrypt(struct
struct ieee80211_key *key = tx->key;
struct ieee80211_mmie_16 *mmie;
struct ieee80211_hdr *hdr;
if (WARN_ON(skb_queue_len(&tx->skbs) != 1))
return TX_DROP;
-@@ -1175,7 +1176,7 @@ ieee80211_crypto_aes_gmac_decrypt(struct
+@@ -1180,7 +1181,7 @@ ieee80211_crypto_aes_gmac_decrypt(struct
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
struct ieee80211_key *key = rx->key;
struct ieee80211_mmie_16 *mmie;
static int ieee80211_ifa6_changed(struct notifier_block *nb,
unsigned long data, void *arg)
{
-@@ -1179,14 +1179,14 @@ int ieee80211_register_hw(struct ieee802
+@@ -1182,14 +1182,14 @@ int ieee80211_register_hw(struct ieee802
rtnl_unlock();
local->ifa6_notifier.notifier_call = ieee80211_ifa6_changed;
result = register_inet6addr_notifier(&local->ifa6_notifier);
if (result)
-@@ -1195,13 +1195,13 @@ int ieee80211_register_hw(struct ieee802
+@@ -1198,13 +1198,13 @@ int ieee80211_register_hw(struct ieee802
return 0;
fail_ifa:
#endif
rtnl_lock();
-@@ -1230,10 +1230,10 @@ void ieee80211_unregister_hw(struct ieee
+@@ -1233,10 +1233,10 @@ void ieee80211_unregister_hw(struct ieee
tasklet_kill(&local->tx_pending_tasklet);
tasklet_kill(&local->tasklet);
};
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
-@@ -818,6 +818,7 @@ enum txq_info_flags {
+@@ -807,6 +807,7 @@ enum txq_info_flags {
IEEE80211_TXQ_STOP,
IEEE80211_TXQ_AMPDU,
IEEE80211_TXQ_NO_AMSDU,
};
/**
-@@ -1227,6 +1228,7 @@ struct ieee80211_local {
+@@ -1214,6 +1215,7 @@ struct ieee80211_local {
struct sk_buff_head pending[IEEE80211_MAX_QUEUES];
struct tasklet_struct tx_pending_tasklet;
atomic_t agg_queue_stop[IEEE80211_MAX_QUEUES];
-@@ -2048,6 +2050,7 @@ void ieee80211_txq_remove_vlan(struct ie
+@@ -2035,6 +2037,7 @@ void ieee80211_txq_remove_vlan(struct ie
struct ieee80211_sub_if_data *sdata);
void ieee80211_fill_txq_stats(struct cfg80211_txq_stats *txqstats,
struct txq_info *txqi);
ccflags-y += -DDEBUG
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
-@@ -1319,18 +1319,12 @@ static int __init ieee80211_init(void)
+@@ -1322,18 +1322,12 @@ static int __init ieee80211_init(void)
if (ret)
return ret;
rc80211_minstrel_exit();
return ret;
-@@ -1338,7 +1332,6 @@ static int __init ieee80211_init(void)
+@@ -1341,7 +1335,6 @@ static int __init ieee80211_init(void)
static void __exit ieee80211_exit(void)
{
struct cfg80211_nan_conf *conf)
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
-@@ -829,6 +829,8 @@ enum txq_info_flags {
+@@ -818,6 +818,8 @@ enum txq_info_flags {
* a fq_flow which is already owned by a different tin
* @def_cvars: codel vars for @def_flow
* @frags: used to keep fragments created after dequeue
*/
struct txq_info {
struct fq_tin tin;
-@@ -836,6 +838,8 @@ struct txq_info {
+@@ -825,6 +827,8 @@ struct txq_info {
struct codel_vars def_cvars;
struct codel_stats cstats;
struct sk_buff_head frags;
unsigned long flags;
/* keep last! */
-@@ -1128,6 +1132,11 @@ struct ieee80211_local {
+@@ -1115,6 +1119,11 @@ struct ieee80211_local {
struct codel_vars *cvars;
struct codel_params cparams;
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
-@@ -1261,7 +1261,7 @@ void ieee80211_sta_ps_deliver_wakeup(str
+@@ -1265,7 +1265,7 @@ void ieee80211_sta_ps_deliver_wakeup(str
if (!txq_has_queue(sta->sta.txq[i]))
continue;
sta->debugfs_dir,
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
-@@ -1137,6 +1137,8 @@ struct ieee80211_local {
+@@ -1124,6 +1124,8 @@ struct ieee80211_local {
struct list_head active_txqs[IEEE80211_NUM_ACS];
u16 schedule_round[IEEE80211_NUM_ACS];
INIT_LIST_HEAD(&local->chanctx_list);
mutex_init(&local->chanctx_mtx);
-@@ -1153,6 +1154,9 @@ int ieee80211_register_hw(struct ieee802
+@@ -1156,6 +1157,9 @@ int ieee80211_register_hw(struct ieee802
if (!local->hw.max_nan_de_entries)
local->hw.max_nan_de_entries = IEEE80211_MAX_NAN_INSTANCE_ID;
}
}
-@@ -399,9 +396,12 @@ struct sta_info *sta_info_alloc(struct i
+@@ -401,9 +398,12 @@ struct sta_info *sta_info_alloc(struct i
if (sta_prepare_rate_control(local, sta, gfp))
goto free_txq;
}
for (i = 0; i < IEEE80211_NUM_TIDS; i++)
-@@ -1838,6 +1838,27 @@ void ieee80211_sta_set_buffered(struct i
+@@ -1842,6 +1842,27 @@ void ieee80211_sta_set_buffered(struct i
}
EXPORT_SYMBOL(ieee80211_sta_set_buffered);
int sta_info_move_state(struct sta_info *sta,
enum ieee80211_sta_state new_state)
{
-@@ -2208,6 +2229,23 @@ void sta_set_sinfo(struct sta_info *sta,
+@@ -2212,6 +2233,23 @@ void sta_set_sinfo(struct sta_info *sta,
sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_FAILED);
}
for_each_possible_cpu(cpu) {
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
-@@ -127,6 +127,16 @@ enum ieee80211_agg_stop_reason {
+@@ -128,6 +128,16 @@ enum ieee80211_agg_stop_reason {
AGG_STOP_DESTROY_STA,
};
struct sta_info;
/**
-@@ -563,6 +573,9 @@ struct sta_info {
+@@ -593,6 +603,9 @@ struct sta_info {
} tx_stats;
u16 tid_seq[IEEE80211_QOS_CTL_TID_MASK + 1];
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
-@@ -179,6 +179,7 @@ struct ieee80211_tx_data {
+@@ -161,6 +161,7 @@ struct ieee80211_tx_data {
struct ieee80211_tx_rate rate;
unsigned int flags;
size_t klen, u8 *data, size_t data_len);
--- a/net/mac80211/wpa.c
+++ b/net/mac80211/wpa.c
-@@ -44,7 +44,7 @@ ieee80211_tx_h_michael_mic_add(struct ie
+@@ -45,7 +45,7 @@ ieee80211_tx_h_michael_mic_add(struct ie
skb->len < 24 || !ieee80211_is_data_present(hdr->frame_control))
return TX_CONTINUE;
if (skb->len < hdrlen)
return TX_DROP;
-@@ -195,7 +195,6 @@ mic_fail_no_key:
+@@ -196,7 +196,6 @@ mic_fail_no_key:
static int tkip_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb)
{
struct ieee80211_key *key = tx->key;
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
unsigned int hdrlen;
-@@ -210,7 +209,7 @@ static int tkip_encrypt_skb(struct ieee8
+@@ -211,7 +210,7 @@ static int tkip_encrypt_skb(struct ieee8
return 0;
}
len = skb->len - hdrlen;
if (info->control.hw_key)
-@@ -428,7 +427,7 @@ static int ccmp_encrypt_skb(struct ieee8
+@@ -429,7 +428,7 @@ static int ccmp_encrypt_skb(struct ieee8
return 0;
}
len = skb->len - hdrlen;
if (info->control.hw_key)
-@@ -660,7 +659,7 @@ static int gcmp_encrypt_skb(struct ieee8
+@@ -663,7 +662,7 @@ static int gcmp_encrypt_skb(struct ieee8
return 0;
}
len = skb->len - hdrlen;
if (info->control.hw_key)
-@@ -800,7 +799,6 @@ static ieee80211_tx_result
+@@ -805,7 +804,6 @@ static ieee80211_tx_result
ieee80211_crypto_cs_encrypt(struct ieee80211_tx_data *tx,
struct sk_buff *skb)
{
struct ieee80211_key *key = tx->key;
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
int hdrlen;
-@@ -816,8 +814,7 @@ ieee80211_crypto_cs_encrypt(struct ieee8
+@@ -821,8 +819,7 @@ ieee80211_crypto_cs_encrypt(struct ieee8
pskb_expand_head(skb, iv_len, 0, GFP_ATOMIC)))
return TX_DROP;
* mac80211 is capable of taking advantage of many hardware
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
-@@ -1877,6 +1877,10 @@ int ieee80211_if_add(struct ieee80211_lo
+@@ -1873,6 +1873,10 @@ int ieee80211_if_add(struct ieee80211_lo
+ 8 /* rfc1042/bridge tunnel */
- ETH_HLEN /* ethernet hard_header_len */
+ IEEE80211_ENCRYPT_HEADROOM;
if (!(mshdr->flags & MESH_FLAGS_AE)) {
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
-@@ -2621,7 +2621,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
+@@ -2705,7 +2705,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
struct ieee80211_local *local = rx->local;
struct ieee80211_sub_if_data *sdata = rx->sdata;
struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
int tailroom = 0;
hdr = (struct ieee80211_hdr *) skb->data;
-@@ -2714,7 +2714,9 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
+@@ -2798,7 +2798,9 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
if (sdata->crypto_tx_tailroom_needed_cnt)
tailroom = IEEE80211_ENCRYPT_TAILROOM;
sdata->encrypt_headroom,
tailroom, GFP_ATOMIC);
if (!fwd_skb)
-@@ -2746,6 +2748,12 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
+@@ -2830,6 +2832,12 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
return RX_DROP_MONITOR;
}
out:
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
-@@ -311,7 +311,7 @@ struct ieee80211_fast_tx {
+@@ -312,7 +312,7 @@ struct ieee80211_fast_tx {
u8 hdr_len;
u8 sa_offs, da_offs, pn_offs;
u8 band;
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
-@@ -1301,6 +1301,7 @@ static void ieee80211_if_setup(struct ne
+@@ -1297,6 +1297,7 @@ static void ieee80211_if_setup(struct ne
static void ieee80211_if_setup_no_queue(struct net_device *dev)
{
ieee80211_if_setup(dev);
/**
--- a/net/mac80211/wpa.c
+++ b/net/mac80211/wpa.c
-@@ -947,7 +947,8 @@ ieee80211_crypto_aes_cmac_encrypt(struct
+@@ -952,7 +952,8 @@ ieee80211_crypto_aes_cmac_encrypt(struct
info = IEEE80211_SKB_CB(skb);
return TX_CONTINUE;
if (WARN_ON(skb_tailroom(skb) < sizeof(*mmie)))
-@@ -963,6 +964,9 @@ ieee80211_crypto_aes_cmac_encrypt(struct
+@@ -968,6 +969,9 @@ ieee80211_crypto_aes_cmac_encrypt(struct
bip_ipn_set64(mmie->sequence_number, pn64);
}
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
-@@ -2069,7 +2069,8 @@ void ieee80211_send_auth(struct ieee8021
+@@ -2056,7 +2056,8 @@ void ieee80211_send_auth(struct ieee8021
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,
enum {
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
-@@ -2203,8 +2203,9 @@ static void ieee80211_set_disassoc(struc
+@@ -2208,8 +2208,9 @@ static void ieee80211_set_disassoc(struc
!ifmgd->have_beacon)
drv_mgd_prepare_tx(sdata->local, sdata, 0);
}
/* flush out frame - make sure the deauth was actually sent */
-@@ -4369,7 +4370,7 @@ void ieee80211_mgd_quiesce(struct ieee80
+@@ -4374,7 +4375,7 @@ void ieee80211_mgd_quiesce(struct ieee80
* cfg80211 won't know and won't actually abort those attempts,
* thus we need to do that ourselves.
*/
IEEE80211_STYPE_DEAUTH,
WLAN_REASON_DEAUTH_LEAVING,
false, frame_buf);
-@@ -5349,7 +5350,7 @@ int ieee80211_mgd_deauth(struct ieee8021
+@@ -5354,7 +5355,7 @@ int ieee80211_mgd_deauth(struct ieee8021
ieee80211_get_reason_code_string(req->reason_code));
drv_mgd_prepare_tx(sdata->local, sdata, 0);
IEEE80211_STYPE_DEAUTH,
req->reason_code, tx,
frame_buf);
-@@ -5369,7 +5370,7 @@ int ieee80211_mgd_deauth(struct ieee8021
+@@ -5374,7 +5375,7 @@ int ieee80211_mgd_deauth(struct ieee8021
ieee80211_get_reason_code_string(req->reason_code));
drv_mgd_prepare_tx(sdata->local, sdata, 0);
CFG80211_TESTMODE_CMD(ieee80211_testmode_cmd)
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
-@@ -1366,6 +1366,7 @@ struct ieee80211_local {
+@@ -1353,6 +1353,7 @@ struct ieee80211_local {
int dynamic_ps_forced_timeout;
int user_power_level; /* in dBm, for all interfaces */