Commit 7bcfb136 authored by Eric Biggers's avatar Eric Biggers Committed by Herbert Xu

crypto: crc32c-generic - remove cra_alignmask

crc32c-generic sets an alignmask, but actually its ->update() works with
any alignment; only its ->setkey() and outputting the final digest
assume an alignment.  To prevent the buffer from having to be aligned by
the crypto API for just these cases, switch these cases over to the
unaligned access macros and remove the cra_alignmask.  Note that this
also makes crc32c-generic more consistent with crc32-generic.
Signed-off-by: default avatarEric Biggers <>
Signed-off-by: default avatarHerbert Xu <>
parent fffe7d92
......@@ -35,6 +35,7 @@
#include <asm/unaligned.h>
#include <crypto/internal/hash.h>
#include <linux/init.h>
#include <linux/module.h>
......@@ -82,7 +83,7 @@ static int chksum_setkey(struct crypto_shash *tfm, const u8 *key,
crypto_shash_set_flags(tfm, CRYPTO_TFM_RES_BAD_KEY_LEN);
return -EINVAL;
mctx->key = le32_to_cpu(*(__le32 *)key);
mctx->key = get_unaligned_le32(key);
return 0;
......@@ -99,13 +100,13 @@ static int chksum_final(struct shash_desc *desc, u8 *out)
struct chksum_desc_ctx *ctx = shash_desc_ctx(desc);
*(__le32 *)out = ~cpu_to_le32p(&ctx->crc);
put_unaligned_le32(~ctx->crc, out);
return 0;
static int __chksum_finup(u32 *crcp, const u8 *data, unsigned int len, u8 *out)
*(__le32 *)out = ~cpu_to_le32(__crc32c_le(*crcp, data, len));
put_unaligned_le32(~__crc32c_le(*crcp, data, len), out);
return 0;
......@@ -148,7 +149,6 @@ static struct shash_alg alg = {
.cra_priority = 100,
.cra_blocksize = CHKSUM_BLOCK_SIZE,
.cra_alignmask = 3,
.cra_ctxsize = sizeof(struct chksum_ctx),
.cra_module = THIS_MODULE,
.cra_init = crc32c_cra_init,
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment