diff options
author | Johannes Berg <johannes.berg@intel.com> | 2011-07-06 22:00:35 +0200 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-07-08 11:11:20 -0400 |
commit | 75396ae6d433b49482e377e6f8dbf1f42ad53f3a (patch) | |
tree | 07fb506f08f3cca7d67d2fd365cc059240b6957b /net/mac80211/debugfs_key.c | |
parent | aba83a0b301c32dbb91c017f33307611e1a1d384 (diff) | |
download | kernel_goldelico_gta04-75396ae6d433b49482e377e6f8dbf1f42ad53f3a.zip kernel_goldelico_gta04-75396ae6d433b49482e377e6f8dbf1f42ad53f3a.tar.gz kernel_goldelico_gta04-75396ae6d433b49482e377e6f8dbf1f42ad53f3a.tar.bz2 |
mac80211: fix CMAC races
Just like TKIP and CCMP, CMAC has the PN race.
It might not actually be possible to hit it now
since there aren't multiple ACs for management
frames, but fix it anyway.
Also move scratch buffers onto the stack.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/debugfs_key.c')
-rw-r--r-- | net/mac80211/debugfs_key.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/net/mac80211/debugfs_key.c b/net/mac80211/debugfs_key.c index 4433760..38e6101 100644 --- a/net/mac80211/debugfs_key.c +++ b/net/mac80211/debugfs_key.c @@ -78,7 +78,6 @@ KEY_OPS(algorithm); static ssize_t key_tx_spec_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { - const u8 *tpn; u64 pn; char buf[20]; int len; @@ -101,10 +100,10 @@ static ssize_t key_tx_spec_read(struct file *file, char __user *userbuf, (u8)(pn >> 16), (u8)(pn >> 8), (u8)pn); break; case WLAN_CIPHER_SUITE_AES_CMAC: - tpn = key->u.aes_cmac.tx_pn; + pn = atomic64_read(&key->u.aes_cmac.tx_pn); len = scnprintf(buf, sizeof(buf), "%02x%02x%02x%02x%02x%02x\n", - tpn[0], tpn[1], tpn[2], tpn[3], tpn[4], - tpn[5]); + (u8)(pn >> 40), (u8)(pn >> 32), (u8)(pn >> 24), + (u8)(pn >> 16), (u8)(pn >> 8), (u8)pn); break; default: return 0; |