Skip to content

Commit

Permalink
staging: rtl8723au: Rework two byte array comparisons
Browse files Browse the repository at this point in the history
Prior to this commit, rtl8723au's rtw_security.c had two instances of
byte array comparisons (for CRC checks) where the individual elements
of the byte arrays were compared one by one and an error trace would
be output if the byte arrays were determined to be different.

This commit improves the readability of the CRC verification by
placing the individual 4 bytes of each byte array into an 32-bit
unsigned integer and comparing the two resulting integers.

Thanks to Larry Finger for spotting the code style issues in the
previous version of this commit, and thanks to Joe Perches for
suggesting the use of 32-bit integer comparisons instead of byte
array comparisons.

Signed-off-by: M. Vefa Bicakci <m.v.b@runbox.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
M. Vefa Bicakci authored and Greg Kroah-Hartman committed Apr 3, 2015
1 parent 046ca5f commit 87a4329
Showing 1 changed file with 14 additions and 20 deletions.
34 changes: 14 additions & 20 deletions drivers/staging/rtl8723au/core/rtw_security.c
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ void rtw_wep_decrypt23a(struct rtw_adapter *padapter,
struct recv_frame *precvframe)
{
/* exclude ICV */
u8 crc[4];
u32 actual_crc, expected_crc;
struct arc4context mycontext;
int length;
u32 keylength;
Expand Down Expand Up @@ -243,16 +243,14 @@ void rtw_wep_decrypt23a(struct rtw_adapter *padapter,
arcfour_encrypt(&mycontext, payload, payload, length);

/* calculate icv and compare the icv */
*((u32 *)crc) = le32_to_cpu(getcrc32(payload, length - 4));
actual_crc = le32_to_cpu(getcrc32(payload, length - 4));
expected_crc = le32_to_cpu(get_unaligned_le32(&payload[length - 4]));

if (crc[3] != payload[length - 1] || crc[2] != payload[length - 2] ||
crc[1] != payload[length - 3] || crc[0] != payload[length - 4]) {
if (actual_crc != expected_crc) {
RT_TRACE(_module_rtl871x_security_c_, _drv_err_,
"rtw_wep_decrypt23a:icv error crc[3](%x)!= payload[length-1](%x) || crc[2](%x)!= payload[length-2](%x) || crc[1](%x)!= payload[length-3](%x) || crc[0](%x)!= payload[length-4](%x)\n",
crc[3], payload[length - 1],
crc[2], payload[length - 2],
crc[1], payload[length - 3],
crc[0], payload[length - 4]);
"rtw_wep_decrypt23a:icv CRC mismatch: "
"actual: %08x, expected: %08x\n",
actual_crc, expected_crc);
}
}

Expand Down Expand Up @@ -714,7 +712,7 @@ int rtw_tkip_decrypt23a(struct rtw_adapter *padapter,
u32 pnh;
u8 rc4key[16];
u8 ttkey[16];
u8 crc[4];
u32 actual_crc, expected_crc;
struct arc4context mycontext;
int length;
u32 prwskeylen;
Expand Down Expand Up @@ -771,18 +769,14 @@ int rtw_tkip_decrypt23a(struct rtw_adapter *padapter,
arcfour_init(&mycontext, rc4key, 16);
arcfour_encrypt(&mycontext, payload, payload, length);

*((u32 *)crc) = le32_to_cpu(getcrc32(payload, length - 4));
actual_crc = le32_to_cpu(getcrc32(payload, length - 4));
expected_crc = le32_to_cpu(get_unaligned_le32(&payload[length - 4]));

if (crc[3] != payload[length - 1] ||
crc[2] != payload[length - 2] ||
crc[1] != payload[length - 3] ||
crc[0] != payload[length - 4]) {
if (actual_crc != expected_crc) {
RT_TRACE(_module_rtl871x_security_c_, _drv_err_,
"rtw_wep_decrypt23a:icv error crc[3](%x)!= payload[length-1](%x) || crc[2](%x)!= payload[length-2](%x) || crc[1](%x)!= payload[length-3](%x) || crc[0](%x)!= payload[length-4](%x)\n",
crc[3], payload[length - 1],
crc[2], payload[length - 2],
crc[1], payload[length - 3],
crc[0], payload[length - 4]);
"rtw_wep_decrypt23a:icv CRC mismatch: "
"actual: %08x, expected: %08x\n",
actual_crc, expected_crc);
res = _FAIL;
}

Expand Down

0 comments on commit 87a4329

Please sign in to comment.