ARM: crypto: fix function cast warnings
Subsystems (2)
PATCH 1/1 ARM: crypto: fix function cast warnings
From: Arnd Bergmann <[email protected]>
clang-16 warns about casting between incompatible function types:
arch/arm/crypto/sha256_glue.c:37:5: error: cast from 'void (*)(u32 *, const void *, unsigned int)' (aka 'void (*)(unsigned int *, const void *, unsigned int)') to 'sha256_block_fn *' (aka 'void (*)(struct sha256_state *, const unsigned char *, int)') converts to incompatible function type [-Werror,-Wcast-function-type-strict]
37 | (sha256_block_fn *)sha256_block_data_order);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/arm/crypto/sha512-glue.c:34:3: error: cast from 'void (*)(u64 *, const u8 *, int)' (aka 'void (*)(unsigned long long *, const unsigned char *, int)') to 'sha512_block_fn *' (aka 'void (*)(struct sha512_state *, const unsigned char *, int)') converts to incompatible function type [-Werror,-Wcast-function-type-strict]
34 | (sha512_block_fn *)sha512_block_data_order);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Rework the sha256/sha512 code to instead go through a trivial helper function to preserve the calling conventions.
--- arch/arm/crypto/sha256_glue.c | 18 ++++++++++-------- arch/arm/crypto/sha512-glue.c | 11 ++++++++--- 2 files changed, 18 insertions(+), 11 deletions(-)
arch/arm/crypto/sha256_glue.c +10 -8
@@ -27,29 +27,31 @@ asmlinkage void sha256_block_data_order(u32 *digest, const void *data,unsigned int num_blks); -int crypto_sha256_arm_update (struct shash_desc *desc,const u8 *data, -unsigned int len) +static void sha256_block_data_order_wrapper (struct sha256_state *sst,u8 const *src,int blocks) {/* make sure casting to sha256_block_fn() is safe */ BUILD_BUG_ON (offsetof(struct sha256_state , state) !=0 ); -return sha256_base_do_update (desc, data, len, - (sha256_block_fn *)sha256_block_data_order); +return sha256_block_data_order ((u32 *)sst, src, blocks); +} + +int crypto_sha256_arm_update (struct shash_desc *desc,const u8 *data, +unsigned int len) +{ +return sha256_base_do_update (desc, data, len, sha256_block_data_order_wrapper); }EXPORT_SYMBOL (crypto_sha256_arm_update);static int crypto_sha256_arm_final (struct shash_desc *desc,u8 *out) { -sha256_base_do_finalize (desc, - (sha256_block_fn *)sha256_block_data_order); +sha256_base_do_finalize (desc, sha256_block_data_order_wrapper);return sha256_base_finish (desc, out); }int crypto_sha256_arm_finup (struct shash_desc *desc,const u8 *data,unsigned int len,u8 *out) { -sha256_base_do_update (desc, data, len, - (sha256_block_fn *)sha256_block_data_order); +sha256_base_do_update (desc, data, len, sha256_block_data_order_wrapper);return crypto_sha256_arm_final (desc, out); }EXPORT_SYMBOL (crypto_sha256_arm_finup);
arch/arm/crypto/sha512-glue.c +8 -3
@@ -27,17 +27,22 @@ MODULE_ALIAS_CRYPTO("sha512-arm"); asmlinkage void sha512_block_data_order(u64 *state, u8 const *src, int blocks); +static void sha512_block_data_order_wrapper (struct sha512_state *sst,u8 const *src,int blocks) +{ +return sha512_block_data_order ((u64 *)sst, src, blocks); +} +int sha512_arm_update (struct shash_desc *desc,const u8 *data,unsigned int len) {return sha512_base_do_update (desc, data, len, - (sha512_block_fn *)sha512_block_data_order); + sha512_block_data_order_wrapper); }static int sha512_arm_final (struct shash_desc *desc,u8 *out) {sha512_base_do_finalize (desc, - (sha512_block_fn *)sha512_block_data_order); + sha512_block_data_order_wrapper);return sha512_base_finish (desc, out); }
@@ -45,7 +50,7 @@ int sha512_arm_finup(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out) {sha512_base_do_update (desc ,data ,len , - (sha512_block_fn *)sha512_block_data_order); +sha512_block_data_order_wrapper );return sha512_arm_final (desc, out); }
Signature · 1 line
2.39.2
Herbert Xu
maintainerQuoted 3 lines · Arnd Bergmann
Rework the sha256/sha512 code to instead go through a trivial helper function to preserve the calling conventions.
Why not just change the assembly function prototype?
Thanks,
Signature · 3 lines
Email: Herbert Xu <[email protected]> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
Quoted 6 lines · Herbert Xu
Quoted 3 lines · Arnd Bergmann
Rework the sha256/sha512 code to instead go through a trivial helper function to preserve the calling conventions.
Why not just change the assembly function prototype?
Good idea, sent v2 now.
Arnd