| From herbert@gondor.apana.org.au Wed Nov 14 17:07:36 2007 |
| From: Herbert Xu <herbert@gondor.apana.org.au> |
| Date: Thu, 15 Nov 2007 09:07:23 +0800 |
| Subject: libcrc32c: keep intermediate crc state in cpu order |
| To: Greg KH <greg@kroah.com> |
| Cc: stable@kernel.org |
| Message-ID: <20071115010723.GA20904@gondor.apana.org.au> |
| Content-Disposition: inline |
| |
| From: Herbert Xu <herbert@gondor.apana.org.au> |
| |
| It's upstream changeset ef19454bd437b2ba14c9cda1de85debd9f383484. |
| |
| [LIB] crc32c: Keep intermediate crc state in cpu order |
| |
| crypto/crc32.c:chksum_final() is computing the digest as |
| *(__le32 *)out = ~cpu_to_le32(mctx->crc); |
| so the low-level crc32c_le routines should just keep |
| the crc in cpu order, otherwise it is getting swabbed |
| one too many times on big-endian machines. |
| |
| Signed-off-by: Benny Halevy <bhalevy@fs1.bhalevy.com> |
| Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| lib/libcrc32c.c | 7 ++----- |
| 1 file changed, 2 insertions(+), 5 deletions(-) |
| |
| --- a/lib/libcrc32c.c |
| +++ b/lib/libcrc32c.c |
| @@ -33,7 +33,6 @@ |
| #include <linux/crc32c.h> |
| #include <linux/compiler.h> |
| #include <linux/module.h> |
| -#include <asm/byteorder.h> |
| |
| MODULE_AUTHOR("Clay Haapala <chaapala@cisco.com>"); |
| MODULE_DESCRIPTION("CRC32c (Castagnoli) calculations"); |
| @@ -161,15 +160,13 @@ static const u32 crc32c_table[256] = { |
| */ |
| |
| u32 __attribute_pure__ |
| -crc32c_le(u32 seed, unsigned char const *data, size_t length) |
| +crc32c_le(u32 crc, unsigned char const *data, size_t length) |
| { |
| - u32 crc = __cpu_to_le32(seed); |
| - |
| while (length--) |
| crc = |
| crc32c_table[(crc ^ *data++) & 0xFFL] ^ (crc >> 8); |
| |
| - return __le32_to_cpu(crc); |
| + return crc; |
| } |
| |
| #endif /* CRC_LE_BITS == 8 */ |