--- /dev/null
+Used for AP+STA support in OpenWrt - preserve AP mode keys across STA reconnects
+
+--- a/net/mac80211/cfg.c
++++ b/net/mac80211/cfg.c
+@@ -846,7 +846,6 @@ static int ieee80211_stop_ap(struct wiph
+ sdata->u.ap.driver_smps_mode = IEEE80211_SMPS_OFF;
+
+ __sta_info_flush(sdata, true);
+- ieee80211_free_keys(sdata, true);
+
+ sdata->vif.bss_conf.enable_beacon = false;
+ sdata->vif.bss_conf.ssid_len = 0;
--- /dev/null
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Mon, 27 Oct 2014 11:50:28 +0100
+Subject: [PATCH] mac80211: flush keys for AP mode on ieee80211_do_stop
+
+Userspace can add keys to an AP mode interface before start_ap has been
+called. If there have been no calls to start_ap/stop_ap in the mean
+time, the keys will still be around when the interface is brought down.
+
+Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+---
+
+--- a/net/mac80211/iface.c
++++ b/net/mac80211/iface.c
+@@ -931,9 +931,6 @@ static void ieee80211_do_stop(struct iee
+ * another CPU.
+ */
+ ieee80211_free_keys(sdata, true);
+-
+- /* fall through */
+- case NL80211_IFTYPE_AP:
+ skb_queue_purge(&sdata->skb_queue);
+ }
+
__NL80211_ATTR_AFTER_LAST,
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
-@@ -2092,6 +2092,19 @@ static int ieee80211_get_tx_power(struct
+@@ -2091,6 +2091,19 @@ static int ieee80211_get_tx_power(struct
return 0;
}
static int ieee80211_set_wds_peer(struct wiphy *wiphy, struct net_device *dev,
const u8 *addr)
{
-@@ -3573,6 +3586,7 @@ const struct cfg80211_ops mac80211_confi
+@@ -3572,6 +3585,7 @@ const struct cfg80211_ops mac80211_confi
.set_wiphy_params = ieee80211_set_wiphy_params,
.set_tx_power = ieee80211_set_tx_power,
.get_tx_power = ieee80211_get_tx_power,