mac80211: fix key flush handling in AP+STA
authorFelix Fietkau <nbd@openwrt.org>
Mon, 27 Oct 2014 11:02:23 +0000 (11:02 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Mon, 27 Oct 2014 11:02:23 +0000 (11:02 +0000)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
SVN-Revision: 43079

package/kernel/mac80211/patches/110-mac80211_keep_keys_on_stop_ap.patch [new file with mode: 0644]
package/kernel/mac80211/patches/347-mac80211-flush-keys-for-AP-mode-on-ieee80211_do_stop.patch [new file with mode: 0644]
package/kernel/mac80211/patches/522-mac80211_configure_antenna_gain.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 (file)
index 0000000..d1d9fbd
--- /dev/null
@@ -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 (file)
index 0000000..94cd7c1
--- /dev/null
@@ -0,0 +1,23 @@
+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);
+       }
index ddf5ef624b2f57ded0bc7ce1c27ecec2866e1f5e..a6119c554482b9f6a80b4268e92dc1381810d37b 100644 (file)
@@ -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,