From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 041CD71 for ; Tue, 11 May 2021 09:49:31 +0000 (UTC) Received: by mail-ej1-f45.google.com with SMTP id s20so23317932ejr.9 for ; Tue, 11 May 2021 02:49:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=YSPQb+nNhnbHjEsR3HVzuPYSWfg6mm9JCNCoWb+AMRM=; b=X3g8K0/hKUdTNwUFXwDV4w0mAPHm0EmWP/RkTq825cV95ZXefEGwlmVoQdbTlYXfl8 C52wdhVHyB7ttOyRrjJpfYTHM2Gi0n+LmT+szHzDWuXeVKOazdD+1Bp7v2JDMwuVoXGw ckDichZPITLgyE3V0dLTOhk+uofk8f7iXi5cHGo+Ns8SfvCiasBsNZ2K6FfCf8jiS4Dn VjaSmbAcnVnfgV2u1Alkqfm142x/+gPRSYJQ5CM0eSWdIB9nKBhaH9bEzyzHM751AJYV 9+wUX9j7NQcRGiaVJvViTz0b3pSpCyXStYgonEPPqxnpSgDI8dxWkD+pVLHH6XPGuN3X G8OA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=YSPQb+nNhnbHjEsR3HVzuPYSWfg6mm9JCNCoWb+AMRM=; b=Ps2a6lunvtd5ZCfmXGouhC2035lEVDKHQt7WWznudmikTyW/96JuN5ie/JeaROdDly lor0K9e9nc6+f6dUK6Khpax+kNPwEQ2iCNWqyZif51ULiahDYLPzYsAH9QGbDFeF7SJe +RiY5X0u3xy0yAgCpWbfOqksoSpwn1RV/WKoN6nIsk80Roy3826W/XgVPxykiCNYa2il Cp4iJw7n3xw4kIABrMa68roPZAhZXNh5a6H73aRHG5W10i/JHY3DOMz9gzCUAjUYepoC DZaShYwxfSKidbndHrl8p01DiyHEI7W4bcgWzSltUxuusIzd5BEf3k135UO/fSYdFchX hKDA== X-Gm-Message-State: AOAM53209/GDVNEB1KFhsQQs9/pcsAprhsayEk2b4TgeFP1SAAklLhoT vM6Zv8Ogs6oqBEYZNh5hdZY= X-Google-Smtp-Source: ABdhPJxZa829+QL5jbwdtz3dPtohmnrtZI1I5h18ymDFnMn/Tnyq3hrwl5A8Ru1/XvIEBxZPjKD69w== X-Received: by 2002:a17:906:980a:: with SMTP id lm10mr1264055ejb.482.1620726570534; Tue, 11 May 2021 02:49:30 -0700 (PDT) Received: from agape.jhs ([5.171.80.244]) by smtp.gmail.com with ESMTPSA id p5sm4431070ejm.115.2021.05.11.02.49.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 May 2021 02:49:30 -0700 (PDT) Date: Tue, 11 May 2021 11:49:27 +0200 From: Fabio Aiuto To: David Laight Cc: "gregkh@linuxfoundation.org" , "linux-staging@lists.linux.dev" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v2 1/2] staging: rtl8723bs: replace private CRC-32 routines with in-kernel ones Message-ID: <20210511094927.GA1410@agape.jhs> References: <29938747c82e4cf1837be5f1cdb803b7@AcuMS.aculab.com> X-Mailing-List: linux-staging@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <29938747c82e4cf1837be5f1cdb803b7@AcuMS.aculab.com> User-Agent: Mutt/1.10.1 (2018-07-13) Hello David, On Mon, May 10, 2021 at 01:38:49PM +0000, David Laight wrote: > > replace private CRC-32 routines with in-kernel ones. > > Have you verified that they compute the same CRC? > > There are all sorts of subtle reasons why the outputs can differ. > > David > > - > Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK > Registration No: 1397386 (Wales) > I tried this: #include #include #include /* Copy pasted from rtl8723bs/core/rtw_security.c */ static signed int bcrc32initialized; static u32 crc32_table[256]; MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("CRC-32 verifier"); MODULE_AUTHOR("Fabio Aiuto"); /* Copy pasted from rtl8723bs/core/rtw_security.c */ static u8 crc32_reverseBit(u8 data) { return ((u8)((data<<7)&0x80) | ((data<<5)&0x40) | ((data<<3)&0x20) | ((data<<1)&0x10) | ((data>>1)&0x08) | ((data>>3)&0x04) | ((data>>5)&0x02) | ((data>>7)&0x01)); } /* Copy pasted from rtl8723bs/core/rtw_security.c */ static void crc32_init(void) { if (bcrc32initialized == 1) return; else { signed int i, j; u32 c; u8 *p = (u8 *)&c, *p1; u8 k; c = 0x12340000; for (i = 0; i < 256; ++i) { k = crc32_reverseBit((u8)i); for (c = ((u32)k) << 24, j = 8; j > 0; --j) c = c & 0x80000000 ? (c << 1) ^ CRC32_POLY_BE : (c << 1); p1 = (u8 *)&crc32_table[i]; p1[0] = crc32_reverseBit(p[3]); p1[1] = crc32_reverseBit(p[2]); p1[2] = crc32_reverseBit(p[1]); p1[3] = crc32_reverseBit(p[0]); } bcrc32initialized = 1; } } /* Copy pasted from rtl8723bs/core/rtw_security.c */ static __le32 getcrc32(u8 *buf, signed int len) { u8 *p; u32 crc; if (bcrc32initialized == 0) crc32_init(); crc = 0xffffffff; /* preload shift register, per CRC-32 spec */ for (p = buf; len > 0; ++p, --len) crc = crc32_table[(crc ^ *p) & 0xff] ^ (crc >> 8); return cpu_to_le32(~crc); /* transmit complement, per CRC-32 spec */ } static int __init crc32_entry(void) { u8 payload; unsigned char crc_priv[4], crc_pub[4]; payload = (u8)1234; /* private crc calculation used in rtl8723bs */ *((__le32 *)crc_priv) = getcrc32(&payload, 2); pr_info("private rtl8723bs crc: %x", *crc_priv); /* in-kernel public crc calculation */ *((__le32 *)crc_pub) = ~crc32_le(~0, &payload, 2); pr_info("generic crc: %x", *crc_pub); return 0; } static void __exit crc32_exit(void) { } module_init(crc32_entry); module_exit(crc32_exit); And run it on qemu. Don't know why to display the second pr_info() I have to rmmod it, but both methods give the same result (62) [ 38.149979] crc32m: module is from the staging directory, the quality is unknown, you have been warned. [ 38.169208] private rtl8723bs crc: 62 [ 38.169400] generic crc: 62 thank you, fabio