aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/wpa.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2007-09-26 09:19:40 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:53:13 -0400
commit4f0d18e26f8bc4c6507b69aa0080d0fae807c990 (patch)
treeb9ef529b35cec6a81b8b7868c80088a30aa6bc9d /net/mac80211/wpa.c
parentb2e7771e556917cc301a3308561f49b2b2272c07 (diff)
[PATCH] mac80211: consolidate decryption
Currently, we run through all three crypto algorithms for each received frame even though we have previously determined which key we have and as such already know which algorithm will be used. Change it to invoke only the needed function. Also move the WEP decrypt handler to wep.c so that fewer functions need to be non-static. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/wpa.c')
-rw-r--r--net/mac80211/wpa.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/net/mac80211/wpa.c b/net/mac80211/wpa.c
index 360d11e9de1..108fe3e81e2 100644
--- a/net/mac80211/wpa.c
+++ b/net/mac80211/wpa.c
@@ -281,7 +281,7 @@ ieee80211_tx_h_tkip_encrypt(struct ieee80211_txrx_data *tx)
281 281
282 282
283ieee80211_txrx_result 283ieee80211_txrx_result
284ieee80211_rx_h_tkip_decrypt(struct ieee80211_txrx_data *rx) 284ieee80211_crypto_tkip_decrypt(struct ieee80211_txrx_data *rx)
285{ 285{
286 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) rx->skb->data; 286 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) rx->skb->data;
287 u16 fc; 287 u16 fc;
@@ -293,9 +293,7 @@ ieee80211_rx_h_tkip_decrypt(struct ieee80211_txrx_data *rx)
293 fc = le16_to_cpu(hdr->frame_control); 293 fc = le16_to_cpu(hdr->frame_control);
294 hdrlen = ieee80211_get_hdrlen(fc); 294 hdrlen = ieee80211_get_hdrlen(fc);
295 295
296 if (!rx->key || rx->key->conf.alg != ALG_TKIP || 296 if ((rx->fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_DATA)
297 !(rx->fc & IEEE80211_FCTL_PROTECTED) ||
298 (rx->fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_DATA)
299 return TXRX_CONTINUE; 297 return TXRX_CONTINUE;
300 298
301 if (!rx->sta || skb->len - hdrlen < 12) 299 if (!rx->sta || skb->len - hdrlen < 12)
@@ -535,7 +533,7 @@ ieee80211_tx_h_ccmp_encrypt(struct ieee80211_txrx_data *tx)
535 533
536 534
537ieee80211_txrx_result 535ieee80211_txrx_result
538ieee80211_rx_h_ccmp_decrypt(struct ieee80211_txrx_data *rx) 536ieee80211_crypto_ccmp_decrypt(struct ieee80211_txrx_data *rx)
539{ 537{
540 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) rx->skb->data; 538 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) rx->skb->data;
541 u16 fc; 539 u16 fc;
@@ -549,9 +547,7 @@ ieee80211_rx_h_ccmp_decrypt(struct ieee80211_txrx_data *rx)
549 fc = le16_to_cpu(hdr->frame_control); 547 fc = le16_to_cpu(hdr->frame_control);
550 hdrlen = ieee80211_get_hdrlen(fc); 548 hdrlen = ieee80211_get_hdrlen(fc);
551 549
552 if (!key || key->conf.alg != ALG_CCMP || 550 if ((rx->fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_DATA)
553 !(rx->fc & IEEE80211_FCTL_PROTECTED) ||
554 (rx->fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_DATA)
555 return TXRX_CONTINUE; 551 return TXRX_CONTINUE;
556 552
557 data_len = skb->len - hdrlen - CCMP_HDR_LEN - CCMP_MIC_LEN; 553 data_len = skb->len - hdrlen - CCMP_HDR_LEN - CCMP_MIC_LEN;