crypto: riscv - Use SYM_FUNC_START for functions only called directly
authorNathan Chancellor <nathan@kernel.org>
Fri, 25 Apr 2025 00:23:22 +0000 (17:23 -0700)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 25 Apr 2025 02:46:05 +0000 (10:46 +0800)
After some recent changes to the RISC-V crypto code that turned some
indirect function calls into direct ones, builds with CONFIG_CFI_CLANG
fail with:

  ld.lld: error: undefined symbol: __kcfi_typeid_sm3_transform_zvksh_zvkb
  >>> referenced by arch/riscv/crypto/sm3-riscv64-zvksh-zvkb.o:(.text+0x2) in archive vmlinux.a

  ld.lld: error: undefined symbol: __kcfi_typeid_sha512_transform_zvknhb_zvkb
  >>> referenced by arch/riscv/crypto/sha512-riscv64-zvknhb-zvkb.o:(.text+0x2) in archive vmlinux.a

  ld.lld: error: undefined symbol: __kcfi_typeid_sha256_transform_zvknha_or_zvknhb_zvkb
  >>> referenced by arch/riscv/crypto/sha256-riscv64-zvknha_or_zvknhb-zvkb.o:(.text+0x2) in archive vmlinux.a

As these functions are no longer indirectly called (i.e., have their
address taken), the compiler will not emit __kcfi_typeid symbols for
them but SYM_TYPED_FUNC_START expects these to exist at link time.

Switch the definitions of these functions to use SYM_FUNC_START, as they
no longer need kCFI type information since they are only called
directly.

Fixes: 1523eaed0ac5 ("crypto: riscv/sm3 - Use API partial block handling")
Fixes: 561aab1104d8 ("crypto: riscv/sha512 - Use API partial block handling")
Fixes: e6c5597badf2 ("crypto: riscv/sha256 - Use API partial block handling")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
arch/riscv/crypto/sha256-riscv64-zvknha_or_zvknhb-zvkb.S
arch/riscv/crypto/sha512-riscv64-zvknhb-zvkb.S
arch/riscv/crypto/sm3-riscv64-zvksh-zvkb.S

index 8ebcc17de4dce3639adad8a4d80e85f8e452ed7c..f1f5779e473239dd59991dc61cfbee8530e79a2f 100644 (file)
@@ -43,7 +43,7 @@
 // - RISC-V Vector SHA-2 Secure Hash extension ('Zvknha' or 'Zvknhb')
 // - RISC-V Vector Cryptography Bit-manipulation extension ('Zvkb')
 
-#include <linux/cfi_types.h>
+#include <linux/linkage.h>
 
 .text
 .option arch, +zvknha, +zvkb
 
 // void sha256_transform_zvknha_or_zvknhb_zvkb(u32 state[8], const u8 *data,
 //                                            int num_blocks);
-SYM_TYPED_FUNC_START(sha256_transform_zvknha_or_zvknhb_zvkb)
+SYM_FUNC_START(sha256_transform_zvknha_or_zvknhb_zvkb)
 
        // Load the round constants into K0-K15.
        vsetivli        zero, 4, e32, m1, ta, ma
index 3a9ae210f91586ac3a92d056de9fbebf43f0e878..89f4a10d12dd678100b7f057ff3fad2b22db334e 100644 (file)
@@ -43,7 +43,7 @@
 // - RISC-V Vector SHA-2 Secure Hash extension ('Zvknhb')
 // - RISC-V Vector Cryptography Bit-manipulation extension ('Zvkb')
 
-#include <linux/cfi_types.h>
+#include <linux/linkage.h>
 
 .text
 .option arch, +zvknhb, +zvkb
@@ -95,7 +95,7 @@
 
 // void sha512_transform_zvknhb_zvkb(u64 state[8], const u8 *data,
 //                                  int num_blocks);
-SYM_TYPED_FUNC_START(sha512_transform_zvknhb_zvkb)
+SYM_FUNC_START(sha512_transform_zvknhb_zvkb)
 
        // Setup mask for the vmerge to replace the first word (idx==0) in
        // message scheduling.  There are 4 words, so an 8-bit mask suffices.
index a2b65d961c04a2d33c673b7c8e9292d50e5c71cf..4fe754846f657edfc95e9703d3a77a4cb1b245e3 100644 (file)
@@ -43,7 +43,7 @@
 // - RISC-V Vector SM3 Secure Hash extension ('Zvksh')
 // - RISC-V Vector Cryptography Bit-manipulation extension ('Zvkb')
 
-#include <linux/cfi_types.h>
+#include <linux/linkage.h>
 
 .text
 .option arch, +zvksh, +zvkb
@@ -81,7 +81,7 @@
 .endm
 
 // void sm3_transform_zvksh_zvkb(u32 state[8], const u8 *data, int num_blocks);
-SYM_TYPED_FUNC_START(sm3_transform_zvksh_zvkb)
+SYM_FUNC_START(sm3_transform_zvksh_zvkb)
 
        // Load the state and endian-swap each 32-bit word.
        vsetivli        zero, 8, e32, m2, ta, ma