]> git.baikalelectronics.ru Git - kernel.git/commit
mac80211: fix rx data handling for non-data frames on multiple vifs
authorFelix Fietkau <nbd@openwrt.org>
Thu, 21 Jan 2010 23:36:39 +0000 (00:36 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 22 Jan 2010 21:11:33 +0000 (16:11 -0500)
commit050f8ed23f549ec214e551855a5e8b194ae84ec2
tree27eea1536ee2272eeeb5bd85806e38a77cfe702a
parentd7cae5163bd2f432d3a62c364eacb1d0e93a1f9e
mac80211: fix rx data handling for non-data frames on multiple vifs

The loop that passes non-data frames to all relevant vifs inside the
__ieee80211_rx_handle_packet keeps a pointer to the previous sdata to
avoid having to make unnecessary copies of the frame it's handling.
This led to a bug that caused it to apply the ieee80211_rx_data state
to the wrong interface, thereby either missing the rx.sta pointer or
having it assigned where it shouldn't be.
This breaks (among other things) aggregation on some vifs, as action
frame exchages are dropped to the cooked monitor interface due to
rx->sta being NULL.
Fix this by restructuring the loop so that it prepares the rx data just
before making the skb copy and calling the rx handlers.

Cc: stable@kernel.org
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/rx.c