summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorJouni Malinen <j@w1.fi>2010-03-29 05:31:15 (GMT)
committerJohn W. Linville <linville@tuxdriver.com>2010-03-31 18:52:15 (GMT)
commite3efca0a63b4ac4d8849d37d082a95cf1a75162d (patch)
tree5c4e47e62d97fb16ce9447b9514d6773c347dcc0 /net
parent9fd1ea428590cf6e35e5a7df32ff6bccfd371db2 (diff)
downloadlinux-e3efca0a63b4ac4d8849d37d082a95cf1a75162d.tar.xz
mac80211: Fix drop_unencrypted for MFP with hwaccel
Commit bef5d1c70d132145c0fc75b3586a19841a9a82e4 split ieee80211_drop_unencrypted() into separate functions that are used for Data and Management frames. However, it did not handle the RX_FLAG_DECRYPTED correctly for Management frames: ieee80211_drop_unencrypted() can only return 0 for Management frames, so there is no point in calling it here. Instead, just check the status->flag directly. Signed-off-by: Jouni Malinen <j@w1.fi> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net')
-rw-r--r--net/mac80211/rx.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index ea71e1a..14366d4 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1408,12 +1408,15 @@ static int
ieee80211_drop_unencrypted_mgmt(struct ieee80211_rx_data *rx)
{
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
+ struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
__le16 fc = hdr->frame_control;
- int res;
- res = ieee80211_drop_unencrypted(rx, fc);
- if (unlikely(res))
- return res;
+ /*
+ * Pass through unencrypted frames if the hardware has
+ * decrypted them already.
+ */
+ if (status->flag & RX_FLAG_DECRYPTED)
+ return 0;
if (rx->sta && test_sta_flags(rx->sta, WLAN_STA_MFP)) {
if (unlikely(ieee80211_is_unicast_robust_mgmt_frame(rx->skb) &&