aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/rx.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2010-04-07 05:26:56 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-04-07 16:26:25 -0400
commit8c11e4ab09ffb975a89802dde0e9aa52a53b8aa5 (patch)
treee109db68217656b6efd60a59b532e3c7bf3dc25c /net/mac80211/rx.c
parent54297e4d60b74e602138594c131097347d128b5a (diff)
mac80211: fix paged RX crypto
WEP crypto was broken, but upon finding the problem it is evident that other things were broken by the paged RX patch as well. To fix it, for now move the linearising in front. This means that we linearise all frames, which is not at all what we want, but at least it fixes the problem for now. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Acked-by: Zhu Yi <yi.zhu@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r--net/mac80211/rx.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index f42d5060a7bb..a33f865807f9 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -820,7 +820,7 @@ ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)
820{ 820{
821 struct sk_buff *skb = rx->skb; 821 struct sk_buff *skb = rx->skb;
822 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); 822 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
823 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; 823 struct ieee80211_hdr *hdr;
824 int keyidx; 824 int keyidx;
825 int hdrlen; 825 int hdrlen;
826 ieee80211_rx_result result = RX_DROP_UNUSABLE; 826 ieee80211_rx_result result = RX_DROP_UNUSABLE;
@@ -861,6 +861,11 @@ ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)
861 if (!(rx->flags & IEEE80211_RX_RA_MATCH)) 861 if (!(rx->flags & IEEE80211_RX_RA_MATCH))
862 return RX_CONTINUE; 862 return RX_CONTINUE;
863 863
864 if (skb_linearize(rx->skb))
865 return RX_DROP_UNUSABLE;
866
867 hdr = (struct ieee80211_hdr *)skb->data;
868
864 /* start without a key */ 869 /* start without a key */
865 rx->key = NULL; 870 rx->key = NULL;
866 871
@@ -944,9 +949,6 @@ ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)
944 return RX_DROP_MONITOR; 949 return RX_DROP_MONITOR;
945 } 950 }
946 951
947 if (skb_linearize(rx->skb))
948 return RX_DROP_UNUSABLE;
949
950 /* Check for weak IVs if possible */ 952 /* Check for weak IVs if possible */
951 if (rx->sta && rx->key->conf.alg == ALG_WEP && 953 if (rx->sta && rx->key->conf.alg == ALG_WEP &&
952 ieee80211_is_data(hdr->frame_control) && 954 ieee80211_is_data(hdr->frame_control) &&