aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211
diff options
context:
space:
mode:
authorJohan Almbladh <ja@anyfi.net>2013-08-14 09:29:46 -0400
committerJohannes Berg <johannes.berg@intel.com>2013-08-16 06:19:16 -0400
commit86c228a7627f3f2776893da47592234140fbfba8 (patch)
tree38b33316b2d56d89301f272421c615ef85f675f8 /net/mac80211
parentdee08ab83d0378d922b67e7cf10bbec3e4ea343b (diff)
mac80211: perform power save processing before decryption
This patch decouples the power save processing from the frame decryption by running the decrypt rx handler after sta_process. In the case where the decryption failed for some reason, the stack used to not process the PM and MOREDATA bits for that frame. The stack now always performs power save processing regardless of the decryption result. That means that encrypted data frames and NULLFUNC frames are now handled in the same way regarding power save processing, making the stack more robust. Signed-off-by: Johan Almbladh <ja@anyfi.net> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211')
-rw-r--r--net/mac80211/rx.c404
1 files changed, 202 insertions, 202 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 0ac75127b7d2..ffad155316a9 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1049,207 +1049,6 @@ ieee80211_rx_h_check(struct ieee80211_rx_data *rx)
1049 1049
1050 1050
1051static ieee80211_rx_result debug_noinline 1051static ieee80211_rx_result debug_noinline
1052ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)
1053{
1054 struct sk_buff *skb = rx->skb;
1055 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
1056 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1057 int keyidx;
1058 int hdrlen;
1059 ieee80211_rx_result result = RX_DROP_UNUSABLE;
1060 struct ieee80211_key *sta_ptk = NULL;
1061 int mmie_keyidx = -1;
1062 __le16 fc;
1063
1064 /*
1065 * Key selection 101
1066 *
1067 * There are four types of keys:
1068 * - GTK (group keys)
1069 * - IGTK (group keys for management frames)
1070 * - PTK (pairwise keys)
1071 * - STK (station-to-station pairwise keys)
1072 *
1073 * When selecting a key, we have to distinguish between multicast
1074 * (including broadcast) and unicast frames, the latter can only
1075 * use PTKs and STKs while the former always use GTKs and IGTKs.
1076 * Unless, of course, actual WEP keys ("pre-RSNA") are used, then
1077 * unicast frames can also use key indices like GTKs. Hence, if we
1078 * don't have a PTK/STK we check the key index for a WEP key.
1079 *
1080 * Note that in a regular BSS, multicast frames are sent by the
1081 * AP only, associated stations unicast the frame to the AP first
1082 * which then multicasts it on their behalf.
1083 *
1084 * There is also a slight problem in IBSS mode: GTKs are negotiated
1085 * with each station, that is something we don't currently handle.
1086 * The spec seems to expect that one negotiates the same key with
1087 * every station but there's no such requirement; VLANs could be
1088 * possible.
1089 */
1090
1091 /*
1092 * No point in finding a key and decrypting if the frame is neither
1093 * addressed to us nor a multicast frame.
1094 */
1095 if (!(status->rx_flags & IEEE80211_RX_RA_MATCH))
1096 return RX_CONTINUE;
1097
1098 /* start without a key */
1099 rx->key = NULL;
1100
1101 if (rx->sta)
1102 sta_ptk = rcu_dereference(rx->sta->ptk);
1103
1104 fc = hdr->frame_control;
1105
1106 if (!ieee80211_has_protected(fc))
1107 mmie_keyidx = ieee80211_get_mmie_keyidx(rx->skb);
1108
1109 if (!is_multicast_ether_addr(hdr->addr1) && sta_ptk) {
1110 rx->key = sta_ptk;
1111 if ((status->flag & RX_FLAG_DECRYPTED) &&
1112 (status->flag & RX_FLAG_IV_STRIPPED))
1113 return RX_CONTINUE;
1114 /* Skip decryption if the frame is not protected. */
1115 if (!ieee80211_has_protected(fc))
1116 return RX_CONTINUE;
1117 } else if (mmie_keyidx >= 0) {
1118 /* Broadcast/multicast robust management frame / BIP */
1119 if ((status->flag & RX_FLAG_DECRYPTED) &&
1120 (status->flag & RX_FLAG_IV_STRIPPED))
1121 return RX_CONTINUE;
1122
1123 if (mmie_keyidx < NUM_DEFAULT_KEYS ||
1124 mmie_keyidx >= NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS)
1125 return RX_DROP_MONITOR; /* unexpected BIP keyidx */
1126 if (rx->sta)
1127 rx->key = rcu_dereference(rx->sta->gtk[mmie_keyidx]);
1128 if (!rx->key)
1129 rx->key = rcu_dereference(rx->sdata->keys[mmie_keyidx]);
1130 } else if (!ieee80211_has_protected(fc)) {
1131 /*
1132 * The frame was not protected, so skip decryption. However, we
1133 * need to set rx->key if there is a key that could have been
1134 * used so that the frame may be dropped if encryption would
1135 * have been expected.
1136 */
1137 struct ieee80211_key *key = NULL;
1138 struct ieee80211_sub_if_data *sdata = rx->sdata;
1139 int i;
1140
1141 if (ieee80211_is_mgmt(fc) &&
1142 is_multicast_ether_addr(hdr->addr1) &&
1143 (key = rcu_dereference(rx->sdata->default_mgmt_key)))
1144 rx->key = key;
1145 else {
1146 if (rx->sta) {
1147 for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
1148 key = rcu_dereference(rx->sta->gtk[i]);
1149 if (key)
1150 break;
1151 }
1152 }
1153 if (!key) {
1154 for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
1155 key = rcu_dereference(sdata->keys[i]);
1156 if (key)
1157 break;
1158 }
1159 }
1160 if (key)
1161 rx->key = key;
1162 }
1163 return RX_CONTINUE;
1164 } else {
1165 u8 keyid;
1166 /*
1167 * The device doesn't give us the IV so we won't be
1168 * able to look up the key. That's ok though, we
1169 * don't need to decrypt the frame, we just won't
1170 * be able to keep statistics accurate.
1171 * Except for key threshold notifications, should
1172 * we somehow allow the driver to tell us which key
1173 * the hardware used if this flag is set?
1174 */
1175 if ((status->flag & RX_FLAG_DECRYPTED) &&
1176 (status->flag & RX_FLAG_IV_STRIPPED))
1177 return RX_CONTINUE;
1178
1179 hdrlen = ieee80211_hdrlen(fc);
1180
1181 if (rx->skb->len < 8 + hdrlen)
1182 return RX_DROP_UNUSABLE; /* TODO: count this? */
1183
1184 /*
1185 * no need to call ieee80211_wep_get_keyidx,
1186 * it verifies a bunch of things we've done already
1187 */
1188 skb_copy_bits(rx->skb, hdrlen + 3, &keyid, 1);
1189 keyidx = keyid >> 6;
1190
1191 /* check per-station GTK first, if multicast packet */
1192 if (is_multicast_ether_addr(hdr->addr1) && rx->sta)
1193 rx->key = rcu_dereference(rx->sta->gtk[keyidx]);
1194
1195 /* if not found, try default key */
1196 if (!rx->key) {
1197 rx->key = rcu_dereference(rx->sdata->keys[keyidx]);
1198
1199 /*
1200 * RSNA-protected unicast frames should always be
1201 * sent with pairwise or station-to-station keys,
1202 * but for WEP we allow using a key index as well.
1203 */
1204 if (rx->key &&
1205 rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP40 &&
1206 rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP104 &&
1207 !is_multicast_ether_addr(hdr->addr1))
1208 rx->key = NULL;
1209 }
1210 }
1211
1212 if (rx->key) {
1213 if (unlikely(rx->key->flags & KEY_FLAG_TAINTED))
1214 return RX_DROP_MONITOR;
1215
1216 rx->key->tx_rx_count++;
1217 /* TODO: add threshold stuff again */
1218 } else {
1219 return RX_DROP_MONITOR;
1220 }
1221
1222 switch (rx->key->conf.cipher) {
1223 case WLAN_CIPHER_SUITE_WEP40:
1224 case WLAN_CIPHER_SUITE_WEP104:
1225 result = ieee80211_crypto_wep_decrypt(rx);
1226 break;
1227 case WLAN_CIPHER_SUITE_TKIP:
1228 result = ieee80211_crypto_tkip_decrypt(rx);
1229 break;
1230 case WLAN_CIPHER_SUITE_CCMP:
1231 result = ieee80211_crypto_ccmp_decrypt(rx);
1232 break;
1233 case WLAN_CIPHER_SUITE_AES_CMAC:
1234 result = ieee80211_crypto_aes_cmac_decrypt(rx);
1235 break;
1236 default:
1237 /*
1238 * We can reach here only with HW-only algorithms
1239 * but why didn't it decrypt the frame?!
1240 */
1241 return RX_DROP_UNUSABLE;
1242 }
1243
1244 /* the hdr variable is invalid after the decrypt handlers */
1245
1246 /* either the frame has been decrypted or will be dropped */
1247 status->flag |= RX_FLAG_DECRYPTED;
1248
1249 return result;
1250}
1251
1252static ieee80211_rx_result debug_noinline
1253ieee80211_rx_h_check_more_data(struct ieee80211_rx_data *rx) 1052ieee80211_rx_h_check_more_data(struct ieee80211_rx_data *rx)
1254{ 1053{
1255 struct ieee80211_local *local; 1054 struct ieee80211_local *local;
@@ -1550,6 +1349,207 @@ ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx)
1550 return RX_CONTINUE; 1349 return RX_CONTINUE;
1551} /* ieee80211_rx_h_sta_process */ 1350} /* ieee80211_rx_h_sta_process */
1552 1351
1352static ieee80211_rx_result debug_noinline
1353ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)
1354{
1355 struct sk_buff *skb = rx->skb;
1356 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
1357 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1358 int keyidx;
1359 int hdrlen;
1360 ieee80211_rx_result result = RX_DROP_UNUSABLE;
1361 struct ieee80211_key *sta_ptk = NULL;
1362 int mmie_keyidx = -1;
1363 __le16 fc;
1364
1365 /*
1366 * Key selection 101
1367 *
1368 * There are four types of keys:
1369 * - GTK (group keys)
1370 * - IGTK (group keys for management frames)
1371 * - PTK (pairwise keys)
1372 * - STK (station-to-station pairwise keys)
1373 *
1374 * When selecting a key, we have to distinguish between multicast
1375 * (including broadcast) and unicast frames, the latter can only
1376 * use PTKs and STKs while the former always use GTKs and IGTKs.
1377 * Unless, of course, actual WEP keys ("pre-RSNA") are used, then
1378 * unicast frames can also use key indices like GTKs. Hence, if we
1379 * don't have a PTK/STK we check the key index for a WEP key.
1380 *
1381 * Note that in a regular BSS, multicast frames are sent by the
1382 * AP only, associated stations unicast the frame to the AP first
1383 * which then multicasts it on their behalf.
1384 *
1385 * There is also a slight problem in IBSS mode: GTKs are negotiated
1386 * with each station, that is something we don't currently handle.
1387 * The spec seems to expect that one negotiates the same key with
1388 * every station but there's no such requirement; VLANs could be
1389 * possible.
1390 */
1391
1392 /*
1393 * No point in finding a key and decrypting if the frame is neither
1394 * addressed to us nor a multicast frame.
1395 */
1396 if (!(status->rx_flags & IEEE80211_RX_RA_MATCH))
1397 return RX_CONTINUE;
1398
1399 /* start without a key */
1400 rx->key = NULL;
1401
1402 if (rx->sta)
1403 sta_ptk = rcu_dereference(rx->sta->ptk);
1404
1405 fc = hdr->frame_control;
1406
1407 if (!ieee80211_has_protected(fc))
1408 mmie_keyidx = ieee80211_get_mmie_keyidx(rx->skb);
1409
1410 if (!is_multicast_ether_addr(hdr->addr1) && sta_ptk) {
1411 rx->key = sta_ptk;
1412 if ((status->flag & RX_FLAG_DECRYPTED) &&
1413 (status->flag & RX_FLAG_IV_STRIPPED))
1414 return RX_CONTINUE;
1415 /* Skip decryption if the frame is not protected. */
1416 if (!ieee80211_has_protected(fc))
1417 return RX_CONTINUE;
1418 } else if (mmie_keyidx >= 0) {
1419 /* Broadcast/multicast robust management frame / BIP */
1420 if ((status->flag & RX_FLAG_DECRYPTED) &&
1421 (status->flag & RX_FLAG_IV_STRIPPED))
1422 return RX_CONTINUE;
1423
1424 if (mmie_keyidx < NUM_DEFAULT_KEYS ||
1425 mmie_keyidx >= NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS)
1426 return RX_DROP_MONITOR; /* unexpected BIP keyidx */
1427 if (rx->sta)
1428 rx->key = rcu_dereference(rx->sta->gtk[mmie_keyidx]);
1429 if (!rx->key)
1430 rx->key = rcu_dereference(rx->sdata->keys[mmie_keyidx]);
1431 } else if (!ieee80211_has_protected(fc)) {
1432 /*
1433 * The frame was not protected, so skip decryption. However, we
1434 * need to set rx->key if there is a key that could have been
1435 * used so that the frame may be dropped if encryption would
1436 * have been expected.
1437 */
1438 struct ieee80211_key *key = NULL;
1439 struct ieee80211_sub_if_data *sdata = rx->sdata;
1440 int i;
1441
1442 if (ieee80211_is_mgmt(fc) &&
1443 is_multicast_ether_addr(hdr->addr1) &&
1444 (key = rcu_dereference(rx->sdata->default_mgmt_key)))
1445 rx->key = key;
1446 else {
1447 if (rx->sta) {
1448 for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
1449 key = rcu_dereference(rx->sta->gtk[i]);
1450 if (key)
1451 break;
1452 }
1453 }
1454 if (!key) {
1455 for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
1456 key = rcu_dereference(sdata->keys[i]);
1457 if (key)
1458 break;
1459 }
1460 }
1461 if (key)
1462 rx->key = key;
1463 }
1464 return RX_CONTINUE;
1465 } else {
1466 u8 keyid;
1467 /*
1468 * The device doesn't give us the IV so we won't be
1469 * able to look up the key. That's ok though, we
1470 * don't need to decrypt the frame, we just won't
1471 * be able to keep statistics accurate.
1472 * Except for key threshold notifications, should
1473 * we somehow allow the driver to tell us which key
1474 * the hardware used if this flag is set?
1475 */
1476 if ((status->flag & RX_FLAG_DECRYPTED) &&
1477 (status->flag & RX_FLAG_IV_STRIPPED))
1478 return RX_CONTINUE;
1479
1480 hdrlen = ieee80211_hdrlen(fc);
1481
1482 if (rx->skb->len < 8 + hdrlen)
1483 return RX_DROP_UNUSABLE; /* TODO: count this? */
1484
1485 /*
1486 * no need to call ieee80211_wep_get_keyidx,
1487 * it verifies a bunch of things we've done already
1488 */
1489 skb_copy_bits(rx->skb, hdrlen + 3, &keyid, 1);
1490 keyidx = keyid >> 6;
1491
1492 /* check per-station GTK first, if multicast packet */
1493 if (is_multicast_ether_addr(hdr->addr1) && rx->sta)
1494 rx->key = rcu_dereference(rx->sta->gtk[keyidx]);
1495
1496 /* if not found, try default key */
1497 if (!rx->key) {
1498 rx->key = rcu_dereference(rx->sdata->keys[keyidx]);
1499
1500 /*
1501 * RSNA-protected unicast frames should always be
1502 * sent with pairwise or station-to-station keys,
1503 * but for WEP we allow using a key index as well.
1504 */
1505 if (rx->key &&
1506 rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP40 &&
1507 rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP104 &&
1508 !is_multicast_ether_addr(hdr->addr1))
1509 rx->key = NULL;
1510 }
1511 }
1512
1513 if (rx->key) {
1514 if (unlikely(rx->key->flags & KEY_FLAG_TAINTED))
1515 return RX_DROP_MONITOR;
1516
1517 rx->key->tx_rx_count++;
1518 /* TODO: add threshold stuff again */
1519 } else {
1520 return RX_DROP_MONITOR;
1521 }
1522
1523 switch (rx->key->conf.cipher) {
1524 case WLAN_CIPHER_SUITE_WEP40:
1525 case WLAN_CIPHER_SUITE_WEP104:
1526 result = ieee80211_crypto_wep_decrypt(rx);
1527 break;
1528 case WLAN_CIPHER_SUITE_TKIP:
1529 result = ieee80211_crypto_tkip_decrypt(rx);
1530 break;
1531 case WLAN_CIPHER_SUITE_CCMP:
1532 result = ieee80211_crypto_ccmp_decrypt(rx);
1533 break;
1534 case WLAN_CIPHER_SUITE_AES_CMAC:
1535 result = ieee80211_crypto_aes_cmac_decrypt(rx);
1536 break;
1537 default:
1538 /*
1539 * We can reach here only with HW-only algorithms
1540 * but why didn't it decrypt the frame?!
1541 */
1542 return RX_DROP_UNUSABLE;
1543 }
1544
1545 /* the hdr variable is invalid after the decrypt handlers */
1546
1547 /* either the frame has been decrypted or will be dropped */
1548 status->flag |= RX_FLAG_DECRYPTED;
1549
1550 return result;
1551}
1552
1553static inline struct ieee80211_fragment_entry * 1553static inline struct ieee80211_fragment_entry *
1554ieee80211_reassemble_add(struct ieee80211_sub_if_data *sdata, 1554ieee80211_reassemble_add(struct ieee80211_sub_if_data *sdata,
1555 unsigned int frag, unsigned int seq, int rx_queue, 1555 unsigned int frag, unsigned int seq, int rx_queue,
@@ -2933,10 +2933,10 @@ static void ieee80211_rx_handlers(struct ieee80211_rx_data *rx,
2933 */ 2933 */
2934 rx->skb = skb; 2934 rx->skb = skb;
2935 2935
2936 CALL_RXH(ieee80211_rx_h_decrypt)
2937 CALL_RXH(ieee80211_rx_h_check_more_data) 2936 CALL_RXH(ieee80211_rx_h_check_more_data)
2938 CALL_RXH(ieee80211_rx_h_uapsd_and_pspoll) 2937 CALL_RXH(ieee80211_rx_h_uapsd_and_pspoll)
2939 CALL_RXH(ieee80211_rx_h_sta_process) 2938 CALL_RXH(ieee80211_rx_h_sta_process)
2939 CALL_RXH(ieee80211_rx_h_decrypt)
2940 CALL_RXH(ieee80211_rx_h_defragment) 2940 CALL_RXH(ieee80211_rx_h_defragment)
2941 CALL_RXH(ieee80211_rx_h_michael_mic_verify) 2941 CALL_RXH(ieee80211_rx_h_michael_mic_verify)
2942 /* must be after MMIC verify so header is counted in MPDU mic */ 2942 /* must be after MMIC verify so header is counted in MPDU mic */