mac80211: fix error path for TDLS setup
authorArik Nemtsov <arik@wizery.com>
Thu, 17 Jul 2014 14:14:18 +0000 (17:14 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 21 Jul 2014 10:14:03 +0000 (12:14 +0200)
The patch "8f02e6b mac80211: make sure TDLS peer STA exists during
setup" broke TDLS error paths where the STA doesn't exist when sending
the error.
Fix it by only testing for STA existence during a non-error flow.

Signed-off-by: Arik Nemtsov <arikx.nemtsov@intel.com>
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/tdls.c

index b01b3104b4459d774d4d190d29cb93afbb5d3ca5..53c235de5d1c114cbeb435af2c1ee4bb27431a88 100644 (file)
@@ -349,15 +349,19 @@ ieee80211_tdls_mgmt_setup(struct wiphy *wiphy, struct net_device *dev,
        /*
         * 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
+        * during setup through the AP path.
+        * Allow error packets to be sent - sometimes we don't even add a STA
+        * before failing the setup.
         */
-       rcu_read_lock();
-       if (!sta_info_get(sdata, peer)) {
+       if (status_code == 0) {
+               rcu_read_lock();
+               if (!sta_info_get(sdata, peer)) {
+                       rcu_read_unlock();
+                       ret = -ENOLINK;
+                       goto exit;
+               }
                rcu_read_unlock();
-               ret = -ENOLINK;
-               goto exit;
        }
-       rcu_read_unlock();
 
        ieee80211_flush_queues(local, sdata);