aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2012-01-17 12:11:52 -0500
committerDavid S. Miller <davem@davemloft.net>2012-01-17 12:11:52 -0500
commit4144cb2ade46d97b9c41682fd2e9064a59f23a98 (patch)
tree4b5ef937b4d0dcede6b1669f03c3b6dccf57d5bc /net
parent59f608d84f937cb5e2fd3a0b9f848f200d47ba85 (diff)
parent604c4ef1c453a1b2ea2cdf04d2b49afec421ebfa (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
Diffstat (limited to 'net')
-rw-r--r--net/mac80211/cfg.c2
-rw-r--r--net/mac80211/rx.c1
-rw-r--r--net/mac80211/sta_info.c6
-rw-r--r--net/mac80211/tx.c10
-rw-r--r--net/mac80211/wpa.c19
-rw-r--r--net/mac80211/wpa.h2
6 files changed, 28 insertions, 12 deletions
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index e60df48fa4d4..296620d6ca0c 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -791,7 +791,7 @@ static int sta_apply_parameters(struct ieee80211_local *local,
791 if (set & BIT(NL80211_STA_FLAG_AUTHORIZED)) 791 if (set & BIT(NL80211_STA_FLAG_AUTHORIZED))
792 ret = sta_info_move_state_checked(sta, 792 ret = sta_info_move_state_checked(sta,
793 IEEE80211_STA_AUTHORIZED); 793 IEEE80211_STA_AUTHORIZED);
794 else 794 else if (test_sta_flag(sta, WLAN_STA_AUTHORIZED))
795 ret = sta_info_move_state_checked(sta, 795 ret = sta_info_move_state_checked(sta,
796 IEEE80211_STA_ASSOC); 796 IEEE80211_STA_ASSOC);
797 if (ret) 797 if (ret)
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index f407427c642f..751409120769 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1979,6 +1979,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
1979 mesh_path_error_tx(ifmsh->mshcfg.element_ttl, fwd_hdr->addr3, 1979 mesh_path_error_tx(ifmsh->mshcfg.element_ttl, fwd_hdr->addr3,
1980 0, reason, fwd_hdr->addr2, sdata); 1980 0, reason, fwd_hdr->addr2, sdata);
1981 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_no_route); 1981 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_no_route);
1982 kfree_skb(fwd_skb);
1982 return RX_DROP_MONITOR; 1983 return RX_DROP_MONITOR;
1983 } 1984 }
1984 1985
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index 3c428d4839c7..ff11f6bf8266 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -238,9 +238,11 @@ static void sta_unblock(struct work_struct *wk)
238 if (sta->dead) 238 if (sta->dead)
239 return; 239 return;
240 240
241 if (!test_sta_flag(sta, WLAN_STA_PS_STA)) 241 if (!test_sta_flag(sta, WLAN_STA_PS_STA)) {
242 local_bh_disable();
242 ieee80211_sta_ps_deliver_wakeup(sta); 243 ieee80211_sta_ps_deliver_wakeup(sta);
243 else if (test_and_clear_sta_flag(sta, WLAN_STA_PSPOLL)) { 244 local_bh_enable();
245 } else if (test_and_clear_sta_flag(sta, WLAN_STA_PSPOLL)) {
244 clear_sta_flag(sta, WLAN_STA_PS_DRIVER); 246 clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
245 247
246 local_bh_disable(); 248 local_bh_disable();
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index edcd1c7ab83f..e05667cd5e76 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1001,8 +1001,6 @@ ieee80211_tx_h_stats(struct ieee80211_tx_data *tx)
1001static ieee80211_tx_result debug_noinline 1001static ieee80211_tx_result debug_noinline
1002ieee80211_tx_h_encrypt(struct ieee80211_tx_data *tx) 1002ieee80211_tx_h_encrypt(struct ieee80211_tx_data *tx)
1003{ 1003{
1004 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
1005
1006 if (!tx->key) 1004 if (!tx->key)
1007 return TX_CONTINUE; 1005 return TX_CONTINUE;
1008 1006
@@ -1017,13 +1015,7 @@ ieee80211_tx_h_encrypt(struct ieee80211_tx_data *tx)
1017 case WLAN_CIPHER_SUITE_AES_CMAC: 1015 case WLAN_CIPHER_SUITE_AES_CMAC:
1018 return ieee80211_crypto_aes_cmac_encrypt(tx); 1016 return ieee80211_crypto_aes_cmac_encrypt(tx);
1019 default: 1017 default:
1020 /* handle hw-only algorithm */ 1018 return ieee80211_crypto_hw_encrypt(tx);
1021 if (info->control.hw_key) {
1022 ieee80211_tx_set_protected(tx);
1023 return TX_CONTINUE;
1024 }
1025 break;
1026
1027 } 1019 }
1028 1020
1029 return TX_DROP; 1021 return TX_DROP;
diff --git a/net/mac80211/wpa.c b/net/mac80211/wpa.c
index 422b79851ec5..b758350919ff 100644
--- a/net/mac80211/wpa.c
+++ b/net/mac80211/wpa.c
@@ -643,3 +643,22 @@ ieee80211_crypto_aes_cmac_decrypt(struct ieee80211_rx_data *rx)
643 643
644 return RX_CONTINUE; 644 return RX_CONTINUE;
645} 645}
646
647ieee80211_tx_result
648ieee80211_crypto_hw_encrypt(struct ieee80211_tx_data *tx)
649{
650 struct sk_buff *skb;
651 struct ieee80211_tx_info *info = NULL;
652
653 skb_queue_walk(&tx->skbs, skb) {
654 info = IEEE80211_SKB_CB(skb);
655
656 /* handle hw-only algorithm */
657 if (!info->control.hw_key)
658 return TX_DROP;
659 }
660
661 ieee80211_tx_set_protected(tx);
662
663 return TX_CONTINUE;
664}
diff --git a/net/mac80211/wpa.h b/net/mac80211/wpa.h
index baba0608313e..07e33f899c71 100644
--- a/net/mac80211/wpa.h
+++ b/net/mac80211/wpa.h
@@ -32,5 +32,7 @@ ieee80211_tx_result
32ieee80211_crypto_aes_cmac_encrypt(struct ieee80211_tx_data *tx); 32ieee80211_crypto_aes_cmac_encrypt(struct ieee80211_tx_data *tx);
33ieee80211_rx_result 33ieee80211_rx_result
34ieee80211_crypto_aes_cmac_decrypt(struct ieee80211_rx_data *rx); 34ieee80211_crypto_aes_cmac_decrypt(struct ieee80211_rx_data *rx);
35ieee80211_tx_result
36ieee80211_crypto_hw_encrypt(struct ieee80211_tx_data *tx);
35 37
36#endif /* WPA_H */ 38#endif /* WPA_H */