summaryrefslogtreecommitdiff
path: root/package/kernel/mac80211/patches/311-mac80211-remove-drop_unencrypted-code.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/311-mac80211-remove-drop_unencrypted-code.patch')
-rw-r--r--package/kernel/mac80211/patches/311-mac80211-remove-drop_unencrypted-code.patch130
1 files changed, 130 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/311-mac80211-remove-drop_unencrypted-code.patch b/package/kernel/mac80211/patches/311-mac80211-remove-drop_unencrypted-code.patch
new file mode 100644
index 0000000..d6bc082
--- /dev/null
+++ b/package/kernel/mac80211/patches/311-mac80211-remove-drop_unencrypted-code.patch
@@ -0,0 +1,130 @@
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Fri, 20 Mar 2015 11:41:58 +0100
+Subject: [PATCH] mac80211: remove drop_unencrypted code
+
+This mechanism was historic, and only ever used by IBSS, which
+also doesn't need to have it as it properly manages station's
+802.1X PAE state (or, with WEP, always has a key.)
+
+Remove the mechanism to clean up the code.
+
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+---
+
+--- a/net/mac80211/debugfs.c
++++ b/net/mac80211/debugfs.c
+@@ -274,8 +274,6 @@ void debugfs_hw_add(struct ieee80211_loc
+ #ifdef CPTCFG_MAC80211_DEBUG_COUNTERS
+ DEBUGFS_STATS_ADD(tx_handlers_drop, local->tx_handlers_drop);
+ DEBUGFS_STATS_ADD(tx_handlers_queued, local->tx_handlers_queued);
+- DEBUGFS_STATS_ADD(tx_handlers_drop_unencrypted,
+- local->tx_handlers_drop_unencrypted);
+ DEBUGFS_STATS_ADD(tx_handlers_drop_fragment,
+ local->tx_handlers_drop_fragment);
+ DEBUGFS_STATS_ADD(tx_handlers_drop_wep,
+--- a/net/mac80211/debugfs_netdev.c
++++ b/net/mac80211/debugfs_netdev.c
+@@ -177,7 +177,6 @@ static ssize_t ieee80211_if_write_##name
+ IEEE80211_IF_FILE_R(name)
+
+ /* common attributes */
+-IEEE80211_IF_FILE(drop_unencrypted, drop_unencrypted, DEC);
+ IEEE80211_IF_FILE(rc_rateidx_mask_2ghz, rc_rateidx_mask[IEEE80211_BAND_2GHZ],
+ HEX);
+ IEEE80211_IF_FILE(rc_rateidx_mask_5ghz, rc_rateidx_mask[IEEE80211_BAND_5GHZ],
+@@ -562,7 +561,6 @@ IEEE80211_IF_FILE(dot11MeshAwakeWindowDu
+
+ static void add_common_files(struct ieee80211_sub_if_data *sdata)
+ {
+- DEBUGFS_ADD(drop_unencrypted);
+ DEBUGFS_ADD(rc_rateidx_mask_2ghz);
+ DEBUGFS_ADD(rc_rateidx_mask_5ghz);
+ DEBUGFS_ADD(rc_rateidx_mcs_mask_2ghz);
+--- a/net/mac80211/ibss.c
++++ b/net/mac80211/ibss.c
+@@ -249,8 +249,6 @@ static void __ieee80211_sta_join_ibss(st
+ if (presp)
+ kfree_rcu(presp, rcu_head);
+
+- sdata->drop_unencrypted = capability & WLAN_CAPABILITY_PRIVACY ? 1 : 0;
+-
+ /* make a copy of the chandef, it could be modified below. */
+ chandef = *req_chandef;
+ chan = chandef.chan;
+@@ -1289,8 +1287,6 @@ static void ieee80211_sta_create_ibss(st
+
+ if (ifibss->privacy)
+ capability |= WLAN_CAPABILITY_PRIVACY;
+- else
+- sdata->drop_unencrypted = 0;
+
+ __ieee80211_sta_join_ibss(sdata, bssid, sdata->vif.bss_conf.beacon_int,
+ &ifibss->chandef, ifibss->basic_rates,
+--- a/net/mac80211/ieee80211_i.h
++++ b/net/mac80211/ieee80211_i.h
+@@ -842,8 +842,6 @@ struct ieee80211_sub_if_data {
+
+ unsigned long state;
+
+- int drop_unencrypted;
+-
+ char name[IFNAMSIZ];
+
+ /* Fragment table for host-based reassembly */
+@@ -1289,7 +1287,6 @@ struct ieee80211_local {
+ /* TX/RX handler statistics */
+ unsigned int tx_handlers_drop;
+ unsigned int tx_handlers_queued;
+- unsigned int tx_handlers_drop_unencrypted;
+ unsigned int tx_handlers_drop_fragment;
+ unsigned int tx_handlers_drop_wep;
+ unsigned int tx_handlers_drop_not_assoc;
+--- a/net/mac80211/iface.c
++++ b/net/mac80211/iface.c
+@@ -1535,7 +1535,6 @@ int ieee80211_if_change_type(struct ieee
+ }
+
+ /* reset some values that shouldn't be kept across type changes */
+- sdata->drop_unencrypted = 0;
+ if (type == NL80211_IFTYPE_STATION)
+ sdata->u.mgd.use_4addr = false;
+
+--- a/net/mac80211/rx.c
++++ b/net/mac80211/rx.c
+@@ -1897,8 +1897,7 @@ static int ieee80211_drop_unencrypted(st
+ /* Drop unencrypted frames if key is set. */
+ if (unlikely(!ieee80211_has_protected(fc) &&
+ !ieee80211_is_nullfunc(fc) &&
+- ieee80211_is_data(fc) &&
+- (rx->key || rx->sdata->drop_unencrypted)))
++ ieee80211_is_data(fc) && rx->key))
+ return -EACCES;
+
+ return 0;
+--- a/net/mac80211/tx.c
++++ b/net/mac80211/tx.c
+@@ -594,23 +594,8 @@ ieee80211_tx_h_select_key(struct ieee802
+ else if (!is_multicast_ether_addr(hdr->addr1) &&
+ (key = rcu_dereference(tx->sdata->default_unicast_key)))
+ tx->key = key;
+- else if (info->flags & IEEE80211_TX_CTL_INJECTED)
+- tx->key = NULL;
+- else if (!tx->sdata->drop_unencrypted)
+- tx->key = NULL;
+- else if (tx->skb->protocol == tx->sdata->control_port_protocol)
+- tx->key = NULL;
+- else if (ieee80211_is_robust_mgmt_frame(tx->skb) &&
+- !(ieee80211_is_action(hdr->frame_control) &&
+- tx->sta && test_sta_flag(tx->sta, WLAN_STA_MFP)))
+- tx->key = NULL;
+- else if (ieee80211_is_mgmt(hdr->frame_control) &&
+- !ieee80211_is_robust_mgmt_frame(tx->skb))
++ else
+ tx->key = NULL;
+- else {
+- I802_DEBUG_INC(tx->local->tx_handlers_drop_unencrypted);
+- return TX_DROP;
+- }
+
+ if (tx->key) {
+ bool skip_hw = false;