crypto: arm/crc32 - add kCFI annotations to asm routines

The crc32/crc32c implementations using the scalar CRC32 instructions are
accessed via indirect calls, and so they must be annotated with type ids
in order to execute correctly when kCFI is enabled.

Cc: Kees Cook <keescook@chromium.org>
Cc: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Reviewed-by: Kees Cook <kees@kernel.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
Ard Biesheuvel 2024-06-10 17:26:39 +02:00 committed by Herbert Xu
parent 3cbe18b0bc
commit ff33c2e6af

View File

@ -48,6 +48,7 @@
*/ */
#include <linux/linkage.h> #include <linux/linkage.h>
#include <linux/cfi_types.h>
#include <asm/assembler.h> #include <asm/assembler.h>
.text .text
@ -123,11 +124,12 @@
* uint crc32_pmull_le(unsigned char const *buffer, * uint crc32_pmull_le(unsigned char const *buffer,
* size_t len, uint crc32) * size_t len, uint crc32)
*/ */
ENTRY(crc32_pmull_le) SYM_FUNC_START(crc32_pmull_le)
adr r3, .Lcrc32_constants adr r3, .Lcrc32_constants
b 0f b 0f
SYM_FUNC_END(crc32_pmull_le)
ENTRY(crc32c_pmull_le) SYM_FUNC_START(crc32c_pmull_le)
adr r3, .Lcrc32c_constants adr r3, .Lcrc32c_constants
0: bic LEN, LEN, #15 0: bic LEN, LEN, #15
@ -236,8 +238,7 @@ fold_64:
vmov r0, s5 vmov r0, s5
bx lr bx lr
ENDPROC(crc32_pmull_le) SYM_FUNC_END(crc32c_pmull_le)
ENDPROC(crc32c_pmull_le)
.macro __crc32, c .macro __crc32, c
subs ip, r2, #8 subs ip, r2, #8
@ -296,11 +297,11 @@ ARM_BE8(rev16 r3, r3 )
.endm .endm
.align 5 .align 5
ENTRY(crc32_armv8_le) SYM_TYPED_FUNC_START(crc32_armv8_le)
__crc32 __crc32
ENDPROC(crc32_armv8_le) SYM_FUNC_END(crc32_armv8_le)
.align 5 .align 5
ENTRY(crc32c_armv8_le) SYM_TYPED_FUNC_START(crc32c_armv8_le)
__crc32 c __crc32 c
ENDPROC(crc32c_armv8_le) SYM_FUNC_END(crc32c_armv8_le)