mac80211: tkip.c use get/put_unaligned helpers
PATCH 1/3 mac80211: tkip.c use get/put_unaligned helpers
---
This depends on the introduction of the new unaligned helpers, and applies on top of the cleanup patches already in -mm.
net/mac80211/tkip.c | 62 +++++++++++++++++++-------------------------------- 1 files changed, 23 insertions(+), 39 deletions(-)
net/mac80211/tkip.c +23 -39
@@ -63,16 +63,6 @@ static const u16 tkip_sbox[256] = 0x82C3, 0x29B0, 0x5A77, 0x1E11, 0x7BCB, 0xA8FC, 0x6DD6, 0x2C3A, }; - -/* -* Get a cpu-byteorder u16 from a u8 pointer fixing up possible unaligned -* accesses. -*/ -static inline u16 getle16 (const u8 *x) -{ -return le16_to_cpu (get_unaligned ((__le16 *)x)); -} -static inline u16 tkip_S (u16 val) {return tkip_sbox[val &0xff ] ^swab16 (tkip_sbox[val >>8 ]);
@@ -91,17 +81,17 @@ static void tkip_mixing_phase1(const u8 *ta, const u8 *tk, u32 tsc_IV32, p1k[0 ] = tsc_IV32 &0xFFFF ; p1k[1 ] = tsc_IV32 >>16 ; - p1k[2 ] =getle16 (ta +0 ); - p1k[3 ] =getle16 (ta +2 ); - p1k[4 ] =getle16 (ta +4 ); + p1k[2 ] =get_unaligned_le16 (ta +0 ); + p1k[3 ] =get_unaligned_le16 (ta +2 ); + p1k[4 ] =get_unaligned_le16 (ta +4 );for (i =0 ; i <PHASE1_LOOP_COUNT ; i++) { j =2 * (i &1 ); - p1k[0 ] +=tkip_S (p1k[4 ] ^getle16 (tk +0 + j)); - p1k[1 ] +=tkip_S (p1k[0 ] ^getle16 (tk +4 + j)); - p1k[2 ] +=tkip_S (p1k[1 ] ^getle16 (tk +8 + j)); - p1k[3 ] +=tkip_S (p1k[2 ] ^getle16 (tk +12 + j)); - p1k[4 ] +=tkip_S (p1k[3 ] ^getle16 (tk +0 + j)) + i; + p1k[0 ] +=tkip_S (p1k[4 ] ^get_unaligned_le16 (tk +0 + j)); + p1k[1 ] +=tkip_S (p1k[0 ] ^get_unaligned_le16 (tk +4 + j)); + p1k[2 ] +=tkip_S (p1k[1 ] ^get_unaligned_le16 (tk +8 + j)); + p1k[3 ] +=tkip_S (p1k[2 ] ^get_unaligned_le16 (tk +12 + j)); + p1k[4 ] +=tkip_S (p1k[3 ] ^get_unaligned_le16 (tk +0 + j)) + i; } }
@@ -119,14 +109,14 @@ static void tkip_mixing_phase2(const u16 *p1k, const u8 *tk, u16 tsc_IV16, ppk[4 ] = p1k[4 ]; ppk[5 ] = p1k[4 ] + tsc_IV16; - ppk[0 ] +=tkip_S (ppk[5 ] ^getle16 (tk +0 )); - ppk[1 ] +=tkip_S (ppk[0 ] ^getle16 (tk +2 )); - ppk[2 ] +=tkip_S (ppk[1 ] ^getle16 (tk +4 )); - ppk[3 ] +=tkip_S (ppk[2 ] ^getle16 (tk +6 )); - ppk[4 ] +=tkip_S (ppk[3 ] ^getle16 (tk +8 )); - ppk[5 ] +=tkip_S (ppk[4 ] ^getle16 (tk +10 )); - ppk[0 ] +=ror16 (ppk[5 ] ^getle16 (tk +12 ),1 ); - ppk[1 ] +=ror16 (ppk[0 ] ^getle16 (tk +14 ),1 ); + ppk[0 ] +=tkip_S (ppk[5 ] ^get_unaligned_le16 (tk +0 )); + ppk[1 ] +=tkip_S (ppk[0 ] ^get_unaligned_le16 (tk +2 )); + ppk[2 ] +=tkip_S (ppk[1 ] ^get_unaligned_le16 (tk +4 )); + ppk[3 ] +=tkip_S (ppk[2 ] ^get_unaligned_le16 (tk +6 )); + ppk[4 ] +=tkip_S (ppk[3 ] ^get_unaligned_le16 (tk +8 )); + ppk[5 ] +=tkip_S (ppk[4 ] ^get_unaligned_le16 (tk +10 )); + ppk[0 ] +=ror16 (ppk[5 ] ^get_unaligned_le16 (tk +12 ),1 ); + ppk[1 ] +=ror16 (ppk[0 ] ^get_unaligned_le16 (tk +14 ),1 ); ppk[2 ] +=ror16 (ppk[1 ],1 ); ppk[3 ] +=ror16 (ppk[2 ],1 ); ppk[4 ] +=ror16 (ppk[3 ],1 );
@@ -135,11 +125,11 @@ static void tkip_mixing_phase2(const u16 *p1k, const u8 *tk, u16 tsc_IV16, rc4key[0 ] = tsc_IV16 >>8 ; rc4key[1 ] = ((tsc_IV16 >>8 ) |0x20 ) &0x7f ; rc4key[2 ] = tsc_IV16 &0xFF ; - rc4key[3 ] = ((ppk[5 ] ^getle16 (tk)) >>1 ) &0xFF ; + rc4key[3 ] = ((ppk[5 ] ^get_unaligned_le16 (tk)) >>1 ) &0xFF ; rc4key +=4 ; -for (i =0 ; i <6 ; i++) -put_unaligned (cpu_to_le16 (ppk[i]), (__le16 *)rc4key + i); +for (i =0 ; i <12 ; i +=2 ) +put_unaligned_le16 (ppk[i], rc4key + i); }
@@ -153,11 +143,8 @@ u8 * ieee80211_tkip_add_iv(u8 *pos, struct ieee80211_key *key, *pos++ = iv1; *pos++ = iv2; *pos++ = (key->conf.keyidx <<6 ) | (1 <<5 )/* Ext IV */ ; - *pos++ = key->u.tkip.iv32 &0xff ; - *pos++ = (key->u.tkip.iv32 >>8 ) &0xff ; - *pos++ = (key->u.tkip.iv32 >>16 ) &0xff ; - *pos++ = (key->u.tkip.iv32 >>24 ) &0xff ; -return pos; +put_unaligned_le32 (key->u.tkip.iv32, pos); +return pos +4 ; }
@@ -200,10 +187,7 @@ void ieee80211_get_tkip_key(struct ieee80211_key_conf *keyconf, iv16 = data[hdr_len] <<8 ; iv16 += data[hdr_len +2 ]; - iv32 = data[hdr_len +4 ] + - (data[hdr_len +5 ] >>8 ) + - (data[hdr_len +6 ] >>16 ) + - (data[hdr_len +7 ] >>24 ); + iv32 =get_unaligned_le32 (data + hdr_len +4 );#ifdef CONFIG_TKIP_DEBUG printk(KERN_DEBUG "TKIP encrypt: iv16 = 0x%04x, iv32 = 0x%08x\n",
@@ -274,7 +258,7 @@ int ieee80211_tkip_decrypt_data(struct crypto_blkcipher *tfm, iv16 = (pos[0 ] <<8 ) | pos[2 ]; keyid = pos[3 ]; - iv32 = pos[4 ] | (pos[5 ] <<8 ) | (pos[6 ] <<16 ) | (pos[7 ] <<24 ); + iv32 =get_unaligned_le32 (pos +4 ); pos +=8 ;#ifdef CONFIG_TKIP_DEBUG {
Signature · 1 line
1.5.5.144.g3e42
Quoted 4 lines · Harvey Harrison
Signed-off-by Harvey Harrison <[email protected]>---
This depends on the introduction of the new unaligned helpers, and applies on top of the cleanup patches already in -mm.
Please send all mac80211 patches to the linux-wireless mailing list and CC Johannes Berg. (It's a good idea to resend all of the mac80211 patches you sent.)
Thanks,
Jiri
Quoted 127 lines
net/mac80211/tkip.c | 62 +++++++++++++++++++-------------------------------- 1 files changed, 23 insertions(+), 39 deletions(-)net/mac80211/tkip.c +23
-39@@ -63,16 +63,6 @@ static const u16 tkip_sbox[256] = 0x82C3, 0x29B0, 0x5A77, 0x1E11, 0x7BCB, 0xA8FC, 0x6DD6, 0x2C3A, }; - -/* -* Get a cpu-byteorder u16 from a u8 pointer fixing up possible unaligned -* accesses. -*/ -static inline u16 getle16 (const u8 *x) -{ -return le16_to_cpu (get_unaligned ((__le16 *)x)); -} -static inline u16 tkip_S (u16 val) {return tkip_sbox[val &0xff ] ^swab16 (tkip_sbox[val >>8 ]);@@ -91,17 +81,17 @@ static void tkip_mixing_phase1(const u8 *ta, const u8 *tk, u32 tsc_IV32, p1k[0 ] = tsc_IV32 &0xFFFF ; p1k[1 ] = tsc_IV32 >>16 ; - p1k[2 ] =getle16 (ta +0 ); - p1k[3 ] =getle16 (ta +2 ); - p1k[4 ] =getle16 (ta +4 ); + p1k[2 ] =get_unaligned_le16 (ta +0 ); + p1k[3 ] =get_unaligned_le16 (ta +2 ); + p1k[4 ] =get_unaligned_le16 (ta +4 );for (i =0 ; i <PHASE1_LOOP_COUNT ; i++) { j =2 * (i &1 ); - p1k[0 ] +=tkip_S (p1k[4 ] ^getle16 (tk +0 + j)); - p1k[1 ] +=tkip_S (p1k[0 ] ^getle16 (tk +4 + j)); - p1k[2 ] +=tkip_S (p1k[1 ] ^getle16 (tk +8 + j)); - p1k[3 ] +=tkip_S (p1k[2 ] ^getle16 (tk +12 + j)); - p1k[4 ] +=tkip_S (p1k[3 ] ^getle16 (tk +0 + j)) + i; + p1k[0 ] +=tkip_S (p1k[4 ] ^get_unaligned_le16 (tk +0 + j)); + p1k[1 ] +=tkip_S (p1k[0 ] ^get_unaligned_le16 (tk +4 + j)); + p1k[2 ] +=tkip_S (p1k[1 ] ^get_unaligned_le16 (tk +8 + j)); + p1k[3 ] +=tkip_S (p1k[2 ] ^get_unaligned_le16 (tk +12 + j)); + p1k[4 ] +=tkip_S (p1k[3 ] ^get_unaligned_le16 (tk +0 + j)) + i; } }@@ -119,14 +109,14 @@ static void tkip_mixing_phase2(const u16 *p1k, const u8 *tk, u16 tsc_IV16, ppk[4 ] = p1k[4 ]; ppk[5 ] = p1k[4 ] + tsc_IV16; - ppk[0 ] +=tkip_S (ppk[5 ] ^getle16 (tk +0 )); - ppk[1 ] +=tkip_S (ppk[0 ] ^getle16 (tk +2 )); - ppk[2 ] +=tkip_S (ppk[1 ] ^getle16 (tk +4 )); - ppk[3 ] +=tkip_S (ppk[2 ] ^getle16 (tk +6 )); - ppk[4 ] +=tkip_S (ppk[3 ] ^getle16 (tk +8 )); - ppk[5 ] +=tkip_S (ppk[4 ] ^getle16 (tk +10 )); - ppk[0 ] +=ror16 (ppk[5 ] ^getle16 (tk +12 ),1 ); - ppk[1 ] +=ror16 (ppk[0 ] ^getle16 (tk +14 ),1 ); + ppk[0 ] +=tkip_S (ppk[5 ] ^get_unaligned_le16 (tk +0 )); + ppk[1 ] +=tkip_S (ppk[0 ] ^get_unaligned_le16 (tk +2 )); + ppk[2 ] +=tkip_S (ppk[1 ] ^get_unaligned_le16 (tk +4 )); + ppk[3 ] +=tkip_S (ppk[2 ] ^get_unaligned_le16 (tk +6 )); + ppk[4 ] +=tkip_S (ppk[3 ] ^get_unaligned_le16 (tk +8 )); + ppk[5 ] +=tkip_S (ppk[4 ] ^get_unaligned_le16 (tk +10 )); + ppk[0 ] +=ror16 (ppk[5 ] ^get_unaligned_le16 (tk +12 ),1 ); + ppk[1 ] +=ror16 (ppk[0 ] ^get_unaligned_le16 (tk +14 ),1 ); ppk[2 ] +=ror16 (ppk[1 ],1 ); ppk[3 ] +=ror16 (ppk[2 ],1 ); ppk[4 ] +=ror16 (ppk[3 ],1 );@@ -135,11 +125,11 @@ static void tkip_mixing_phase2(const u16 *p1k, const u8 *tk, u16 tsc_IV16, rc4key[0 ] = tsc_IV16 >>8 ; rc4key[1 ] = ((tsc_IV16 >>8 ) |0x20 ) &0x7f ; rc4key[2 ] = tsc_IV16 &0xFF ; - rc4key[3 ] = ((ppk[5 ] ^getle16 (tk)) >>1 ) &0xFF ; + rc4key[3 ] = ((ppk[5 ] ^get_unaligned_le16 (tk)) >>1 ) &0xFF ; rc4key +=4 ; -for (i =0 ; i <6 ; i++) -put_unaligned (cpu_to_le16 (ppk[i]), (__le16 *)rc4key + i); +for (i =0 ; i <12 ; i +=2 ) +put_unaligned_le16 (ppk[i], rc4key + i); }@@ -153,11 +143,8 @@ u8 * ieee80211_tkip_add_iv(u8 *pos, struct ieee80211_key *key, *pos++ = iv1; *pos++ = iv2; *pos++ = (key->conf.keyidx <<6 ) | (1 <<5 )/* Ext IV */ ; - *pos++ = key->u.tkip.iv32 &0xff ; - *pos++ = (key->u.tkip.iv32 >>8 ) &0xff ; - *pos++ = (key->u.tkip.iv32 >>16 ) &0xff ; - *pos++ = (key->u.tkip.iv32 >>24 ) &0xff ; -return pos; +put_unaligned_le32 (key->u.tkip.iv32, pos); +return pos +4 ; }@@ -200,10 +187,7 @@ void ieee80211_get_tkip_key(struct ieee80211_key_conf *keyconf, iv16 = data[hdr_len] <<8 ; iv16 += data[hdr_len +2 ]; - iv32 = data[hdr_len +4 ] + - (data[hdr_len +5 ] >>8 ) + - (data[hdr_len +6 ] >>16 ) + - (data[hdr_len +7 ] >>24 ); + iv32 =get_unaligned_le32 (data + hdr_len +4 );#ifdef CONFIG_TKIP_DEBUG printk(KERN_DEBUG "TKIP encrypt: iv16 = 0x%04x, iv32 = 0x%08x\n",@@ -274,7 +258,7 @@ int ieee80211_tkip_decrypt_data(struct crypto_blkcipher *tfm, iv16 = (pos[0 ] <<8 ) | pos[2 ]; keyid = pos[3 ]; - iv32 = pos[4 ] | (pos[5 ] <<8 ) | (pos[6 ] <<16 ) | (pos[7 ] <<24 ); + iv32 =get_unaligned_le32 (pos +4 ); pos +=8 ;#ifdef CONFIG_TKIP_DEBUG {Signature · 1 line
1.5.5.144.g3e42
Signature · 2 lines
Jiri Benc SUSE Labs
Quoted 5 lines · Jiri Benc
Quoted 2 lines
This depends on the introduction of the new unaligned helpers, and applies on top of the cleanup patches already in -mm.
Please send all mac80211 patches to the linux-wireless mailing list and CC Johannes Berg. (It's a good idea to resend all of the mac80211 patches you sent.)
This patchset is quite special though, as it touches a lot of subsystems and depends on code not yet present in mainline ... quoting Andrew's reply to me:
==
Quoted 3 lines
I guess you are going to push this stuff through -mm altogether, right? I can hardly take this into my tree right now, as the helpers are not in Linus' tree yet.
yeah, sorry, that's been confusing a few people.
Strictly I'd merge the core infrastructure and then send the dependent patches into the relevant maintainers. But that can mean than we needlessly miss the merge window, so it's most parctical to send along an acked-by and I'll merge the dependent patch directly with the appropriate ordering.
==
Signature · 1 line
Jiri Kosina
Johannes Berg
maintainerQuoted 5 lines
Quoted 4 lines
I guess you are going to push this stuff through -mm altogether, right? I can hardly take this into my tree right now, as the helpers are not in Linus' tree yet.
Quoted 7 lines
yeah, sorry, that's been confusing a few people.
Strictly I'd merge the core infrastructure and then send the dependent patches into the relevant maintainers. But that can mean than we needlessly miss the merge window, so it's most parctical to send along an acked-by and I'll merge the dependent patch directly with the appropriate ordering.
I guess what Jiri (Benc) is saying that *I* should ack them, not him. Jiri (Benc), maybe you care to move yourself down in the maintainers file?
johannes
Quoted 12 lines · Johannes Berg
Quoted 11 lines
Quoted 3 lines
I guess you are going to push this stuff through -mm altogether, right? I can hardly take this into my tree right now, as the helpers are not in Linus' tree yet.
yeah, sorry, that's been confusing a few people.
Strictly I'd merge the core infrastructure and then send the dependent patches into the relevant maintainers. But that can mean than we needlessly miss the merge window, so it's most parctical to send along an acked-by and I'll merge the dependent patch directly with the appropriate ordering.
Quoted 3 lines
I guess what Jiri (Benc) is saying that *I* should ack them, not him. Jiri (Benc), maybe you care to move yourself down in the maintainers file?
I'll resubmit a cleaned up series anyways once the unaligned access helpers get into mainline, so don't worry too much about this set I suppose.
Cheers,
Harvey