1. 27 1月, 2010 1 次提交
    • Z
      mac80211: fix NULL pointer dereference when ftrace is enabled · 3092ad05
      Zhu Yi 提交于
      I got below kernel oops when I try to bring down the network interface if
      ftrace is enabled. The root cause is drv_ampdu_action() is passed with a
      NULL ssn pointer in the BA session tear down case. We need to check and
      avoid dereferencing it in trace entry assignment.
      
      BUG: unable to handle kernel NULL pointer dereference
      Modules linked in: at (null)
      IP: [<f98fe02a>] ftrace_raw_event_drv_ampdu_action+0x10a/0x160 [mac80211]
      *pde = 00000000
      Oops: 0000 [#1] SMP DEBUG_PAGEALLOC
      [...]
      Call Trace:
       [<f98fdf20>] ? ftrace_raw_event_drv_ampdu_action+0x0/0x160 [mac80211]
       [<f98dac4c>] ? __ieee80211_stop_rx_ba_session+0xfc/0x220 [mac80211]
       [<f98d97fb>] ? ieee80211_sta_tear_down_BA_sessions+0x3b/0x50 [mac80211]
       [<f98dc6f6>] ? ieee80211_set_disassoc+0xe6/0x230 [mac80211]
       [<f98dc6ac>] ? ieee80211_set_disassoc+0x9c/0x230 [mac80211]
       [<f98dcbb8>] ? ieee80211_mgd_deauth+0x158/0x170 [mac80211]
       [<f98e4bdb>] ? ieee80211_deauth+0x1b/0x20 [mac80211]
       [<f8987f49>] ? __cfg80211_mlme_deauth+0xe9/0x120 [cfg80211]
       [<f898b870>] ? __cfg80211_disconnect+0x170/0x1d0 [cfg80211]
      
      Cc: Johannes Berg <johannes@sipsolutions.net>
      Cc: stable@kernel.org
      Signed-off-by: NZhu Yi <yi.zhu@intel.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      3092ad05
  2. 19 1月, 2010 1 次提交
  3. 16 1月, 2010 1 次提交
  4. 12 1月, 2010 1 次提交
    • F
      mac80211: fix queue selection for data frames on monitor interfaces · 193e70ef
      Felix Fietkau 提交于
      When ieee80211_monitor_select_queue encounters data frames, it selects
      the WMM AC based on skb->priority and assumes that skb->priority
      contains a valid 802.1d tag. However this assumption is incorrect, since
      ieee80211_select_queue has not been called at this point.
      If skb->priority > 7, an array overrun occurs, which could lead to
      invalid values, resulting in crashes in the tx path.
      Fix this by setting skb->priority based on the 802.11 header for QoS
      frames and using the default AC for all non-QoS frames.
      Signed-off-by: NFelix Fietkau <nbd@openwrt.org>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      193e70ef
  5. 09 1月, 2010 3 次提交
  6. 07 1月, 2010 2 次提交
  7. 06 1月, 2010 1 次提交
    • J
      mac80211: fix skb buffering issue · cf0277e7
      Johannes Berg 提交于
      Since I removed the master netdev, we've been
      keeping internal queues only, and even before
      that we never told the networking stack above
      the virtual interfaces about congestion. This
      means that packets are queued in mac80211 and
      the upper layers never know, possibly leading
      to memory exhaustion and other problems.
      
      This patch makes all interfaces multiqueue and
      uses ndo_select_queue to put the packets into
      queues per AC. Additionally, when the driver
      stops a queue, we now stop all corresponding
      queues for the virtual interfaces as well.
      
      The injection case will use VO by default for
      non-data frames, and BE for data frames, but
      downgrade any data frames according to ACM. It
      needs to be fleshed out in the future to allow
      chosing the queue/AC in radiotap.
      Reported-by: NLennert Buytenhek <buytenh@marvell.com>
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Cc: stable@kernel.org [2.6.32]
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      cf0277e7
  8. 29 12月, 2009 3 次提交
    • L
      mac80211: fix propagation of failed hardware reconfigurations · 24feda00
      Luis R. Rodriguez 提交于
      mac80211 does not propagate failed hardware reconfiguration
      requests. For suspend and resume this is important due to all
      the possible issues that can come out of the suspend <-> resume
      cycle. Not propagating the error means cfg80211 will assume
      the resume for the device went through fine and mac80211 will
      continue on trying to poke at the hardware, enable timers,
      queue work, and so on for a device which is completley
      unfunctional.
      
      The least we can do is to propagate device start issues and
      warn when this occurs upon resume. A side effect of this patch
      is we also now propagate the start errors upon harware
      reconfigurations (non-suspend), but this should also be desirable
      anyway, there is not point in continuing to reconfigure a
      device if mac80211 was unable to start the device.
      
      For further details refer to the thread:
      
      http://marc.info/?t=126151038700001&r=1&w=2
      
      Cc: stable@kernel.org
      Signed-off-by: NLuis R. Rodriguez <lrodriguez@atheros.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      24feda00
    • L
      mac80211: fix race with suspend and dynamic_ps_disable_work · b98c06b6
      Luis R. Rodriguez 提交于
      When mac80211 suspends it calls a driver's suspend callback
      as a last step and after that the driver assumes no calls will
      be made to it until we resume and its start callback is kicked.
      If such calls are made, however, suspend can end up throwing
      hardware in an unexpected state and making the device unusable
      upon resume.
      
      Fix this by preventing mac80211 to schedule dynamic_ps_disable_work
      by checking for when mac80211 starts to suspend and starts
      quiescing. Frames should be allowed to go through though as
      that is part of the quiescing steps and we do not flush the
      mac80211 workqueue since it was already done towards the
      beginning of suspend cycle.
      
      The other mac80211 issue will be hanled in the next patch.
      
      For further details see refer to the thread:
      
      http://marc.info/?t=126144866100001&r=1&w=2
      
      Cc: stable@kernel.org
      Signed-off-by: NLuis R. Rodriguez <lrodriguez@atheros.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      b98c06b6
    • F
      mac80211: fix ibss join with fixed-bssid · 2e10d330
      Felix Fietkau 提交于
      When fixed bssid is requested when joining an ibss network, incoming
      beacons that match the configured bssid cause mac80211 to create new
      sta entries, even before the ibss interface is in joined state.
      When that happens, it fails to bring up the interface entirely, because
      it checks for existing sta entries before joining.
      This patch fixes this bug by refusing to create sta info entries before
      the interface is fully operational.
      Signed-off-by: NFelix Fietkau <nbd@openwrt.org>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      2e10d330
  9. 22 12月, 2009 2 次提交
    • J
      mac80211: fix WMM AP settings application · 0183826b
      Johannes Berg 提交于
      My
        commit 77fdaa12
        Author: Johannes Berg <johannes@sipsolutions.net>
        Date:   Tue Jul 7 03:45:17 2009 +0200
      
            mac80211: rework MLME for multiple authentications
      
      inadvertedly broke WMM because it removed, along with
      a bunch of other now useless initialisations, the line
      initialising sdata->u.mgd.wmm_last_param_set to -1
      which would make it adopt any WMM parameter set. If,
      as is usually the case, the AP uses WMM parameter set
      sequence number zero, we'd never update it until the
      AP changes the sequence number.
      
      Add the missing initialisation back to get the WMM
      settings from the AP applied locally.
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Cc: stable@kernel.org [2.6.31+]
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      0183826b
    • J
      mac80211: fix peer HT capabilities · 9a418af5
      Johannes Berg 提交于
      I noticed yesterday, because Jeff had noticed
      a speed regression, cf. bug
      http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2138
      that the SM PS settings for peers were wrong.
      Instead of overwriting the SM PS settings with
      the local bits, we need to keep the remote bits.
      
      The bug was part of the original HT code from
      over two years ago, but unfortunately nobody
      noticed that it makes no sense -- we shouldn't
      be overwriting the peer's setting with our own
      but rather keep it intact when masking the peer
      capabilities with our own.
      
      While fixing that, I noticed that the masking of
      capabilities is completely useless for most of
      the bits, so also fix those other bits.
      
      Finally, I also noticed that PSMP_SUPPORT no
      longer exists in the final 802.11n version, so
      also remove that.
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      9a418af5
  10. 15 12月, 2009 1 次提交
  11. 11 12月, 2009 3 次提交
  12. 10 12月, 2009 1 次提交
  13. 08 12月, 2009 3 次提交
  14. 05 12月, 2009 2 次提交
  15. 04 12月, 2009 1 次提交
  16. 01 12月, 2009 2 次提交
    • J
      mac80211: fix spurious delBA handling · 827d42c9
      Johannes Berg 提交于
      Lennert Buytenhek noticed that delBA handling in mac80211
      was broken and has remotely triggerable problems, some of
      which are due to some code shuffling I did that ended up
      changing the order in which things were done -- this was
      
        commit d75636ef
        Author: Johannes Berg <johannes@sipsolutions.net>
        Date:   Tue Feb 10 21:25:53 2009 +0100
      
          mac80211: RX aggregation: clean up stop session
      
      and other parts were already present in the original
      
        commit d92684e6
        Author: Ron Rindjunsky <ron.rindjunsky@intel.com>
        Date:   Mon Jan 28 14:07:22 2008 +0200
      
            mac80211: A-MPDU Tx add delBA from recipient support
      
      The first problem is that I moved a BUG_ON before various
      checks -- thereby making it possible to hit. As the comment
      indicates, the BUG_ON can be removed since the ampdu_action
      callback must already exist when the state is != IDLE.
      
      The second problem isn't easily exploitable but there's a
      race condition due to unconditionally setting the state to
      OPERATIONAL when a delBA frame is received, even when no
      aggregation session was ever initiated. All the drivers
      accept stopping the session even then, but that opens a
      race window where crashes could happen before the driver
      accepts it. Right now, a WARN_ON may happen with non-HT
      drivers, while the race opens only for HT drivers.
      
      For this case, there are two things necessary to fix it:
       1) don't process spurious delBA frames, and be more careful
          about the session state; don't drop the lock
      
       2) HT drivers need to be prepared to handle a session stop
          even before the session was really started -- this is
          true for all drivers (that support aggregation) but
          iwlwifi which can be fixed easily. The other HT drivers
          (ath9k and ar9170) are behaving properly already.
      Reported-by: NLennert Buytenhek <buytenh@marvell.com>
      Cc: stable@kernel.org
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      827d42c9
    • J
      mac80211: fix two remote exploits · 4253119a
      Johannes Berg 提交于
      Lennert Buytenhek noticed a remotely triggerable problem
      in mac80211, which is due to some code shuffling I did
      that ended up changing the order in which things were
      done -- this was in
      
        commit d75636ef
        Author: Johannes Berg <johannes@sipsolutions.net>
        Date:   Tue Feb 10 21:25:53 2009 +0100
      
          mac80211: RX aggregation: clean up stop session
      
      The problem is that the BUG_ON moved before the various
      checks, and as such can be triggered.
      
      As the comment indicates, the BUG_ON can be removed since
      the ampdu_action callback must already exist when the
      state is OPERATIONAL.
      
      A similar code path leads to a WARN_ON in
      ieee80211_stop_tx_ba_session, which can also be removed.
      
      Cc: stable@kernel.org [2.6.29+]
      Cc: Lennert Buytenhek <buytenh@marvell.com>
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      4253119a
  17. 30 11月, 2009 1 次提交
  18. 29 11月, 2009 4 次提交
  19. 26 11月, 2009 1 次提交
  20. 24 11月, 2009 3 次提交
  21. 20 11月, 2009 3 次提交