mac80211: make sure TDLS peer STA exists during setup
authorArik Nemtsov <arik@wizery.com>
Wed, 11 Jun 2014 14:18:26 +0000 (17:18 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 23 Jun 2014 12:28:18 +0000 (14:28 +0200)
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>
net/mac80211/tdls.c

index 6f3a3ad0cb7c387c43a1197ea4b578f8bc11ead5..b87e369561f420ac5adc1e23b7a7594c25543165 100644 (file)
@@ -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,