crypto: testmgr - handle endianness correctly in alg_test_crc32c()
authorEric Biggers <ebiggers@google.com>
Thu, 10 Jan 2019 20:17:55 +0000 (12:17 -0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 18 Jan 2019 10:43:43 +0000 (18:43 +0800)
The crc32c context is in CPU endianness, whereas the final digest is
little endian.  alg_test_crc32c() got this mixed up.  Fix it.

The test passes both before and after, but this patch fixes the
following sparse warning:

    crypto/testmgr.c:1912:24: warning: cast to restricted __le32

Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/testmgr.c

index 1ce53f8..fd31cfa 100644 (file)
@@ -1889,7 +1889,7 @@ static int alg_test_crc32c(const struct alg_test_desc *desc,
                           const char *driver, u32 type, u32 mask)
 {
        struct crypto_shash *tfm;
-       u32 val;
+       __le32 val;
        int err;
 
        err = alg_test_hash(desc, driver, type, mask);
@@ -1911,7 +1911,7 @@ static int alg_test_crc32c(const struct alg_test_desc *desc,
                shash->tfm = tfm;
                shash->flags = 0;
 
-               *ctx = le32_to_cpu(420553207);
+               *ctx = 420553207;
                err = crypto_shash_final(shash, (u8 *)&val);
                if (err) {
                        printk(KERN_ERR "alg: crc32c: Operation failed for "
@@ -1919,9 +1919,9 @@ static int alg_test_crc32c(const struct alg_test_desc *desc,
                        break;
                }
 
-               if (val != ~420553207) {
-                       printk(KERN_ERR "alg: crc32c: Test failed for %s: "
-                              "%d\n", driver, val);
+               if (val != cpu_to_le32(~420553207)) {
+                       pr_err("alg: crc32c: Test failed for %s: %u\n",
+                              driver, le32_to_cpu(val));
                        err = -EINVAL;
                }
        } while (0);