]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
crypto: x86/aesni - Refactor the common address alignment code
authorChang S. Bae <chang.seok.bae@intel.com>
Thu, 28 Sep 2023 07:25:06 +0000 (00:25 -0700)
committerHerbert Xu <herbert@gondor.apana.org.au>
Thu, 5 Oct 2023 10:16:30 +0000 (18:16 +0800)
The address alignment code has been duplicated for each mode. Instead
of duplicating the same code, refactor the alignment code and simplify
the alignment helpers.

Suggested-by: Eric Biggers <ebiggers@kernel.org>
Link: https://lore.kernel.org/all/20230526065414.GB875@sol.localdomain/
Signed-off-by: Chang S. Bae <chang.seok.bae@intel.com>
Cc: linux-crypto@vger.kernel.org
Cc: x86@kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
arch/x86/crypto/aesni-intel_glue.c

index 39d6a62ac62778339a3efd5bbe5a0096a05f1521..308deeb0c9748b06193156cecf30520251a63233 100644 (file)
@@ -80,6 +80,13 @@ struct gcm_context_data {
        u8 hash_keys[GCM_BLOCK_LEN * 16];
 };
 
+static inline void *aes_align_addr(void *addr)
+{
+       if (crypto_tfm_ctx_alignment() >= AESNI_ALIGN)
+               return addr;
+       return PTR_ALIGN(addr, AESNI_ALIGN);
+}
+
 asmlinkage int aesni_set_key(struct crypto_aes_ctx *ctx, const u8 *in_key,
                             unsigned int key_len);
 asmlinkage void aesni_enc(const void *ctx, u8 *out, const u8 *in);
@@ -201,32 +208,19 @@ static __ro_after_init DEFINE_STATIC_KEY_FALSE(gcm_use_avx2);
 static inline struct
 aesni_rfc4106_gcm_ctx *aesni_rfc4106_gcm_ctx_get(struct crypto_aead *tfm)
 {
-       unsigned long align = AESNI_ALIGN;
-
-       if (align <= crypto_tfm_ctx_alignment())
-               align = 1;
-       return PTR_ALIGN(crypto_aead_ctx(tfm), align);
+       return aes_align_addr(crypto_aead_ctx(tfm));
 }
 
 static inline struct
 generic_gcmaes_ctx *generic_gcmaes_ctx_get(struct crypto_aead *tfm)
 {
-       unsigned long align = AESNI_ALIGN;
-
-       if (align <= crypto_tfm_ctx_alignment())
-               align = 1;
-       return PTR_ALIGN(crypto_aead_ctx(tfm), align);
+       return aes_align_addr(crypto_aead_ctx(tfm));
 }
 #endif
 
 static inline struct crypto_aes_ctx *aes_ctx(void *raw_ctx)
 {
-       unsigned long addr = (unsigned long)raw_ctx;
-       unsigned long align = AESNI_ALIGN;
-
-       if (align <= crypto_tfm_ctx_alignment())
-               align = 1;
-       return (struct crypto_aes_ctx *)ALIGN(addr, align);
+       return aes_align_addr(raw_ctx);
 }
 
 static int aes_set_key_common(struct crypto_aes_ctx *ctx,