1. 26 1月, 2016 1 次提交
  2. 14 1月, 2016 7 次提交
    • H
      mac80211: Don't buffer non-bufferable MMPDUs · da629cf1
      Helmut Schaa 提交于
      Non-bufferable MMPDUs are sent out to STAs even while in PS mode
      (for example probe responses). Applying filtered frame handling for
      these doesn't seem to make much sense and will only create more
      air utilization when the STA wakes up. Hence, apply filtered frame
      handling only for bufferable MMPDUs.
      
      Discovered while testing an old VOIP phone that started probing
      for APs while in PS mode. The mac80211/ath9k AP where the STA is
      associated would reply with a probe response but the phone sometimes
      moved to a new channel already and couldn't ack the probe response
      anymore. In that case mac80211 applied filtered frame handling
      for the un-acked probe response.
      Signed-off-by: NHelmut Schaa <helmut.schaa@googlemail.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      da629cf1
    • E
      mac80211: handle sched_scan_stopped vs. hw restart race · 2bc533bd
      Eliad Peller 提交于
      On hw restart, mac80211 might try to reconfigure already
      stopped sched scan, if ieee80211_sched_scan_stopped_work()
      wasn't scheduled yet.
      
      This in turn will keep the device driver with scheduled scan
      configured, while both mac80211 and cfg80211 will clear
      their sched scan state once the work is scheduled.
      
      Fix it by ignoring ieee80211_sched_scan_stopped() calls
      while in hw restart, and flush the work before starting
      the reconfiguration.
      Signed-off-by: NEliad Peller <eliadx.peller@intel.com>
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      2bc533bd
    • E
      mac80211: fix PS-Poll handling · 1a57081a
      Emmanuel Grumbach 提交于
      My commit below broken PS-Poll handling. In case the driver
      has no frames buffered, driver_release_tids will be 0, but
      calling find_highest_prio_tid() with 0 as a parameter is
      not a good idea:
      fls(0) - 1 = -1.
      This bug caused mac80211 to think that frames were buffered
      in the driver which in turn was confused because mac80211
      was asking to release frames that were not reported to
      exist.
      On iwlwifi, this led to the WARNING below:
      
      WARNING: CPU: 0 PID: 11230 at drivers/net/wireless/intel/iwlwifi/mvm/sta.c:1733 iwl_mvm_sta_modify_sleep_tx_count+0x2af/0x320 [iwlmvm]()
      ffffffffc0627c60 ffff8800069b7648 ffffffff81888913 0000000000000000
      0000000000000000 ffff8800069b7688 ffffffff81089d6a ffff8800069b7678
      0000000000000001 ffff88003b35abf0 ffff88000698b128 ffff8800069b76d4
      Call Trace:
      [<ffffffff81888913>] dump_stack+0x4c/0x65
      [<ffffffff81089d6a>] warn_slowpath_common+0x8a/0xc0
      [<ffffffff81089e5a>] warn_slowpath_null+0x1a/0x20
      [<ffffffffc05f36bf>] iwl_mvm_sta_modify_sleep_tx_count+0x2af/0x320 [iwlmvm]
      [<ffffffffc05dae41>] iwl_mvm_mac_release_buffered_frames+0x31/0x40 [iwlmvm]
      [<ffffffffc045d8b6>] ieee80211_sta_ps_deliver_response+0x6e6/0xd80 [mac80211]
      [<ffffffffc0461296>] ieee80211_sta_ps_deliver_poll_response+0x26/0x30 [mac80211]
      [<ffffffffc048f743>] ieee80211_rx_handlers+0xa83/0x2900 [mac80211]
      [<ffffffffc04917ad>] ieee80211_prepare_and_rx_handle+0x1ed/0xa70 [mac80211]
      [<ffffffffc045e3d5>] ? sta_info_get_bss+0x5/0x4a0 [mac80211]
      [<ffffffffc04925b6>] ieee80211_rx_napi+0x586/0xcd0 [mac80211]
      [<ffffffffc05eaa3e>] iwl_mvm_rx_rx_mpdu+0x59e/0xc60 [iwlmvm]
      
      Fixes: 0ead2510 ("mac80211: allow the driver to send EOSP when needed")
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      1a57081a
    • E
      mac80211: clear local->sched_scan_req properly on reconfig · b9f628fc
      Eliad Peller 提交于
      On reconfig, in case of sched_scan_req->n_scan_plans > 1,
      local->sched_scan_req was never cleared, although
      cfg80211_sched_scan_stopped_rtnl() was called, resulting
      in local->sched_scan_req holding a stale and preventing
      further scheduled scan requests.
      
      Clear it explicitly in this case.
      
      Fixes: 42a7e82c6792 ("mac80211: Do not restart scheduled scan if multiple scan plans are set")
      Signed-off-by: NEliad Peller <eliadx.peller@intel.com>
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      b9f628fc
    • E
      mac80211: avoid ROC during hw restart · 470f4d61
      Eliad Peller 提交于
      Defer ROC requests during hw restart, as the driver
      might not be fully configured in this stage (e.g.
      channel contexts were not added yet)
      Signed-off-by: NEliad Peller <eliadx.peller@intel.com>
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      470f4d61
    • J
      mac80211: fix remain-on-channel cancellation · e6a8a3aa
      Johannes Berg 提交于
      Ilan's previous commit 1b894521 ("mac80211: handle HW
      ROC expired properly") neglected to take into account that
      hw_begun was now always set in the software implementation
      as well as the offloaded case.
      
      Fix hw_begun to only apply to the offloaded case to make
      the check in Ilan's commit safe and correct.
      Reported-by: NJouni Malinen <j@w1.fi>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      e6a8a3aa
    • J
      mac80211: recalculate SW ROC only when needed · e9db4557
      Johannes Berg 提交于
      The current (new) code recalculates the new work timeout
      for software remain-on-channel whenever any item started.
      In two of the callers of ieee80211_handle_roc_started(),
      this is completely pointless since they're for hardware
      and will skip the recalculation entirely; it's necessary
      only in the case of having just added a new item to the
      list, as in the last remaining case the recalculation had
      just been done.
      
      This last case, however, is also problematic - if one of
      the items on the list actually expires during the recalc
      the list iteration outside becomes corrupted and crashes.
      
      Fix this by moving the recalculation to the only place
      where it's required.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      e9db4557
  3. 15 12月, 2015 4 次提交
  4. 07 12月, 2015 1 次提交
    • I
      mac80211: handle HW ROC expired properly · 1b894521
      Ilan Peer 提交于
      In case of HW ROC, when the driver reports that the ROC expired,
      it is not sufficient to purge the ROCs based on the remaining
      time, as it possible that the device finished the ROC session
      before the actual requested duration.
      
      To handle such cases, in case of ROC expired notification from
      the driver, complete all the ROCs which are marked with hw_begun,
      regardless of the remaining duration.
      Signed-off-by: NIlan Peer <ilan.peer@intel.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      1b894521
  5. 04 12月, 2015 18 次提交
  6. 03 12月, 2015 3 次提交
    • J
      mac80211: fix off-channel mgmt-tx uninitialized variable usage · c1df932c
      Johannes Berg 提交于
      In the last change here, I neglected to update the cookie in one code
      path: when a mgmt-tx has no real cookie sent to userspace as it doesn't
      wait for a response, but is off-channel. The original code used the SKB
      pointer as the cookie and always assigned the cookie to the TX SKB in
      ieee80211_start_roc_work(), but my change turned this around and made
      the code rely on a valid cookie being passed in.
      
      Unfortunately, the off-channel no-wait TX path wasn't assigning one at
      all, resulting in an uninitialized stack value being used. This wasn't
      handed back to userspace as a cookie (since in the no-wait case there
      isn't a cookie), but it was tested for non-zero to distinguish between
      mgmt-tx and off-channel.
      
      Fix this by assigning a dummy non-zero cookie unconditionally, and get
      rid of a misleading comment and some dead code while at it. I'll clean
      up the ACK SKB handling separately later.
      
      Fixes: 3b79af97 ("mac80211: stop using pointers as userspace cookies")
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      c1df932c
    • A
      mac80211: do not actively scan DFS channels · 4e39ccac
      Antonio Quartulli 提交于
      DFS channels should not be actively scanned as we can't be sure
      if we are allowed or not.
      
      If the current channel is in the DFS band, active scan might be
      performed after CSA, but we have no guarantee about other channels,
      therefore it is safer to prevent active scanning at all.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: NAntonio Quartulli <antonio@open-mesh.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      4e39ccac
    • E
      mac80211: don't teardown sdata on sdata stop · 835112b2
      Eliad Peller 提交于
      Interfaces are being initialized (setup) on addition,
      and torn down on removal.
      
      However, p2p device is being torn down when stopped,
      resulting in the next p2p start operation being done
      on uninitialized interface.
      
      Solve it by calling ieee80211_teardown_sdata() only
      on interface removal (for the non-netdev case).
      Signed-off-by: NEliad Peller <eliadx.peller@intel.com>
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      [squashed in fix to call teardown after unregister]
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      835112b2
  7. 20 11月, 2015 2 次提交
  8. 17 11月, 2015 2 次提交
    • J
      mac80211: mesh: fix call_rcu() usage · c2e703a5
      Johannes Berg 提交于
      When using call_rcu(), the called function may be delayed quite
      significantly, and without a matching rcu_barrier() there's no
      way to be sure it has finished.
      Therefore, global state that could be gone/freed/reused should
      never be touched in the callback.
      
      Fix this in mesh by moving the atomic_dec() into the caller;
      that's not really a problem since we already unlinked the path
      and it will be destroyed anyway.
      
      This fixes a crash Jouni observed when running certain tests in
      a certain order, in which the mesh interface was torn down, the
      memory reused for a function pointer (work struct) and running
      that then crashed since the pointer had been decremented by 1,
      resulting in an invalid instruction byte stream.
      
      Cc: stable@vger.kernel.org
      Fixes: eb2b9311 ("mac80211: mesh path table implementation")
      Reported-by: NJouni Malinen <j@w1.fi>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      c2e703a5
    • J
      mac80211: don't advertise NL80211_FEATURE_FULL_AP_CLIENT_STATE · 45bb780a
      Johannes Berg 提交于
      For now, this feature doesn't actually work. To avoid shipping a
      kernel that has it enabled but where it can't be used disable it
      for now - we can re-enable it when it's fixed.
      
      This partially reverts 44674d9c ("mac80211: advertise support
      for full station state in AP mode").
      
      Cc: Ayala Beker <ayala.beker@intel.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      45bb780a
  9. 03 11月, 2015 2 次提交