Commit 2a0cfeb8 authored by Helmut Schaa's avatar Helmut Schaa Committed by John W. Linville

rt2x00: Don't overwrite beacon buffers in pairwise key setup

rt2800 devices use parts of the pariwise key table to store the beacon
frames for beacon 6 and 7. To not overwrite the beacon frame buffers
limit the number of entries we store in the pairwise key table to 222.

Also add some descriptive comments about this shared memory usage.
Signed-off-by: default avatarHelmut Schaa <helmut.schaa@googlemail.com>
Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 1a92795d
...@@ -1435,6 +1435,24 @@ ...@@ -1435,6 +1435,24 @@
/* /*
* Security key table memory. * Security key table memory.
*
* The pairwise key table shares some memory with the beacon frame
* buffers 6 and 7. That basically means that when beacon 6 & 7
* are used we should only use the reduced pairwise key table which
* has a maximum of 222 entries.
*
* ---------------------------------------------
* |0x4000 | Pairwise Key | Reduced Pairwise |
* | | Table | Key Table |
* | | Size: 256 * 32 | Size: 222 * 32 |
* |0x5BC0 | |-------------------
* | | | Beacon 6 |
* |0x5DC0 | |-------------------
* | | | Beacon 7 |
* |0x5FC0 | |-------------------
* |0x5FFF | |
* --------------------------
*
* MAC_WCID_BASE: 8-bytes (use only 6 bytes) * 256 entry * MAC_WCID_BASE: 8-bytes (use only 6 bytes) * 256 entry
* PAIRWISE_KEY_TABLE_BASE: 32-byte * 256 entry * PAIRWISE_KEY_TABLE_BASE: 32-byte * 256 entry
* MAC_IVEIV_TABLE_BASE: 8-byte * 256-entry * MAC_IVEIV_TABLE_BASE: 8-byte * 256-entry
...@@ -1584,7 +1602,8 @@ struct mac_iveiv_entry { ...@@ -1584,7 +1602,8 @@ struct mac_iveiv_entry {
* 2. Extract memory from FCE table for BCN 4~5 * 2. Extract memory from FCE table for BCN 4~5
* 3. Extract memory from Pair-wise key table for BCN 6~7 * 3. Extract memory from Pair-wise key table for BCN 6~7
* It occupied those memory of wcid 238~253 for BCN 6 * It occupied those memory of wcid 238~253 for BCN 6
* and wcid 222~237 for BCN 7 * and wcid 222~237 for BCN 7 (see Security key table memory
* for more info).
* *
* IMPORTANT NOTE: Not sure why legacy driver does this, * IMPORTANT NOTE: Not sure why legacy driver does this,
* but HW_BEACON_BASE7 is 0x0200 bytes below HW_BEACON_BASE6. * but HW_BEACON_BASE7 is 0x0200 bytes below HW_BEACON_BASE6.
......
...@@ -1031,8 +1031,12 @@ int rt2800_config_pairwise_key(struct rt2x00_dev *rt2x00dev, ...@@ -1031,8 +1031,12 @@ int rt2800_config_pairwise_key(struct rt2x00_dev *rt2x00dev,
* 1 pairwise key is possible per AID, this means that the AID * 1 pairwise key is possible per AID, this means that the AID
* equals our hw_key_idx. Make sure the WCID starts _after_ the * equals our hw_key_idx. Make sure the WCID starts _after_ the
* last possible shared key entry. * last possible shared key entry.
*
* Since parts of the pairwise key table might be shared with
* the beacon frame buffers 6 & 7 we should only write into the
* first 222 entries.
*/ */
if (crypto->aid > (256 - 32)) if (crypto->aid > (222 - 32))
return -ENOSPC; return -ENOSPC;
key->hw_key_idx = 32 + crypto->aid; key->hw_key_idx = 32 + crypto->aid;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment