summaryrefslogtreecommitdiffstats
path: root/net/mac80211/tdls.c
diff options
context:
space:
mode:
authorArik Nemtsov <arik@wizery.com>2014-06-11 16:18:26 +0200
committerJohannes Berg <johannes.berg@intel.com>2014-06-23 14:28:18 +0200
commit7adc3e4664bc5bd382fa181e6a4506f5b5b583d8 (patch)
tree7384beda7ccdab431af7d3fdfdb8003aab6b17ad /net/mac80211/tdls.c
parentmac80211: add API to request TDLS operation from userspace (diff)
downloadlinux-7adc3e4664bc5bd382fa181e6a4506f5b5b583d8.tar.xz
linux-7adc3e4664bc5bd382fa181e6a4506f5b5b583d8.zip
mac80211: make sure TDLS peer STA exists during setup
Make sure userspace added a TDLS peer station before invoking the transmission of the first setup frame. This ensures packets to the peer won't go through the AP path. Signed-off-by: Arik Nemtsov <arikx.nemtsov@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/tdls.c')
-rw-r--r--net/mac80211/tdls.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/net/mac80211/tdls.c b/net/mac80211/tdls.c
index 6f3a3ad0cb7c..b87e369561f4 100644
--- a/net/mac80211/tdls.c
+++ b/net/mac80211/tdls.c
@@ -332,6 +332,19 @@ ieee80211_tdls_mgmt_setup(struct wiphy *wiphy, struct net_device *dev,
goto exit;
}
+ /*
+ * make sure we have a STA representing the peer so we drop or buffer
+ * non-TDLS-setup frames to the peer. We can't send other packets
+ * during setup through the AP path
+ */
+ rcu_read_lock();
+ if (!sta_info_get(sdata, peer)) {
+ rcu_read_unlock();
+ ret = -ENOLINK;
+ goto exit;
+ }
+ rcu_read_unlock();
+
ieee80211_flush_queues(local, sdata);
ret = ieee80211_tdls_prep_mgmt_packet(wiphy, dev, peer, action_code,