From patchwork Sat Mar 28 12:52:46 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "M. Vefa Bicakci" X-Patchwork-Id: 6113921 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: X-Original-To: patchwork-linux-wireless@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 8E8E5BF4A6 for ; Sat, 28 Mar 2015 12:56:35 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id A30A7203B7 for ; Sat, 28 Mar 2015 12:56:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9E9B4203AD for ; Sat, 28 Mar 2015 12:56:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753809AbbC1M4R (ORCPT ); Sat, 28 Mar 2015 08:56:17 -0400 Received: from aibo.runbox.com ([91.220.196.211]:57370 "EHLO aibo.runbox.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753414AbbC1Mxl (ORCPT ); Sat, 28 Mar 2015 08:53:41 -0400 Received: from [10.9.9.207] (helo=mailfront03.runbox.com) by bars.runbox.com with esmtp (Exim 4.71) (envelope-from ) id 1YbqF9-0000Qj-Fq; Sat, 28 Mar 2015 13:53:39 +0100 Received: from cpe5cd9985fdb46-cm602ad088a62b.cpe.net.cable.rogers.com ([99.241.131.156] helo=localhost.localdomain) by mailfront03.runbox.com with esmtpsa (uid:769847 ) (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.76) id 1YbqF5-0007nm-VQ; Sat, 28 Mar 2015 13:53:36 +0100 From: "M. Vefa Bicakci" To: linux-kernel@vger.kernel.org, linux-wireless@vger.kernel.org Cc: gregkh@linuxfoundation.org, Jes.Sorensen@redhat.com, joe@perches.com, Larry.Finger@lwfinger.net, mail@beyermatthias.de, m.v.b@runbox.com Subject: [PATCH v4 13/15] staging: rtl8723au: Rework two byte array comparisons Date: Sat, 28 Mar 2015 08:52:46 -0400 Message-Id: <1427547168-12078-14-git-send-email-m.v.b@runbox.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1427547168-12078-1-git-send-email-m.v.b@runbox.com> References: <1427547168-12078-1-git-send-email-m.v.b@runbox.com> Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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 --- v2: Correct code style issues and compare 32-bit integers instead of byte arrays. Update the commit message to better reflect the nature of the changes. --- drivers/staging/rtl8723au/core/rtw_security.c | 39 ++++++++++----------------- 1 file changed, 14 insertions(+), 25 deletions(-) diff --git a/drivers/staging/rtl8723au/core/rtw_security.c b/drivers/staging/rtl8723au/core/rtw_security.c index 4330479ee0..eb3544866a 100644 --- a/drivers/staging/rtl8723au/core/rtw_security.c +++ b/drivers/staging/rtl8723au/core/rtw_security.c @@ -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; @@ -243,19 +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)); } } @@ -702,7 +697,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; @@ -757,20 +752,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; }