From e6da32c086c3cb22be14c348be7821e0c98a7566 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Mon, 27 Oct 2014 11:02:23 +0000 Subject: [PATCH] mac80211: fix key flush handling in AP+STA Signed-off-by: Felix Fietkau SVN-Revision: 43079 --- .../110-mac80211_keep_keys_on_stop_ap.patch | 12 ++++++++++ ...eys-for-AP-mode-on-ieee80211_do_stop.patch | 23 +++++++++++++++++++ .../522-mac80211_configure_antenna_gain.patch | 4 ++-- 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 package/kernel/mac80211/patches/110-mac80211_keep_keys_on_stop_ap.patch create mode 100644 package/kernel/mac80211/patches/347-mac80211-flush-keys-for-AP-mode-on-ieee80211_do_stop.patch diff --git a/package/kernel/mac80211/patches/110-mac80211_keep_keys_on_stop_ap.patch b/package/kernel/mac80211/patches/110-mac80211_keep_keys_on_stop_ap.patch new file mode 100644 index 0000000000..d1d9fbd9b1 --- /dev/null +++ b/package/kernel/mac80211/patches/110-mac80211_keep_keys_on_stop_ap.patch @@ -0,0 +1,12 @@ +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; diff --git a/package/kernel/mac80211/patches/347-mac80211-flush-keys-for-AP-mode-on-ieee80211_do_stop.patch b/package/kernel/mac80211/patches/347-mac80211-flush-keys-for-AP-mode-on-ieee80211_do_stop.patch new file mode 100644 index 0000000000..94cd7c112c --- /dev/null +++ b/package/kernel/mac80211/patches/347-mac80211-flush-keys-for-AP-mode-on-ieee80211_do_stop.patch @@ -0,0 +1,23 @@ +From: Felix Fietkau +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 +--- + +--- 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); + } + diff --git a/package/kernel/mac80211/patches/522-mac80211_configure_antenna_gain.patch b/package/kernel/mac80211/patches/522-mac80211_configure_antenna_gain.patch index ddf5ef624b..a6119c5544 100644 --- a/package/kernel/mac80211/patches/522-mac80211_configure_antenna_gain.patch +++ b/package/kernel/mac80211/patches/522-mac80211_configure_antenna_gain.patch @@ -57,7 +57,7 @@ __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; } @@ -77,7 +77,7 @@ 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, -- 2.30.2