aboutsummaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2011-12-07 09:02:21 +0100
committerGreg Kroah-Hartman <gregkh@suse.de>2012-01-06 14:13:48 -0800
commitafa2450ce311b3182c737c3fda59bb557da93409 (patch)
tree408d7e9eb3a6e0ddf17bdd7da3d55682b8940a27 /block
parentd27020f6c090faf3688324af9a8b496435285039 (diff)
downloadkernel_samsung_smdk4412-afa2450ce311b3182c737c3fda59bb557da93409.zip
kernel_samsung_smdk4412-afa2450ce311b3182c737c3fda59bb557da93409.tar.gz
kernel_samsung_smdk4412-afa2450ce311b3182c737c3fda59bb557da93409.tar.bz2
mac80211: fix another race in aggregation start
commit 15062e6a8524f5977f2cbdf6e3eb2f144262f74e upstream. Emmanuel noticed that when mac80211 stops the queues for aggregation that can leave a packet pending. This packet will be given to the driver after the AMPDU callback, but as a non-aggregated packet which messes up the sequence number etc. I also noticed by looking at the code that if packets are being processed while we clear the WANT_START bit, they might see it cleared already and queue up on tid_tx->pending. If the driver then rejects the new aggregation session we leak the packet. Fix both of these issues by changing this code to not stop the queues at all. Instead, let packets queue up on the tid_tx->pending queue instead of letting them get to the driver, and add code to recover properly in case the driver rejects the session. (The patch looks large because it has to move two functions to before their new use.) Reported-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'block')
0 files changed, 0 insertions, 0 deletions