From: Herbert Xu Date: Sat, 10 May 2025 05:10:22 +0000 (+0800) Subject: crypto: powerpc/poly1305 - Add poly1305_emit_arch wrapper X-Git-Tag: v6.16-rc1~206^2~61 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7916eddc533248ec64f5b68657c11b4fca057fab;p=thirdparty%2Fkernel%2Flinux.git crypto: powerpc/poly1305 - Add poly1305_emit_arch wrapper Add poly1305_emit_arch with fallback instead of calling assembly directly. This is because the state format differs between p10 and that of the generic implementation. Reported-by: Venkat Rao Bagalkote Reported-by: Eric Biggers Fixes: 14d31979145d ("crypto: powerpc/poly1305 - Add block-only interface") Signed-off-by: Herbert Xu --- diff --git a/arch/powerpc/lib/crypto/poly1305-p10-glue.c b/arch/powerpc/lib/crypto/poly1305-p10-glue.c index 7cea0ebcc6bc5..3f1664a724b65 100644 --- a/arch/powerpc/lib/crypto/poly1305-p10-glue.c +++ b/arch/powerpc/lib/crypto/poly1305-p10-glue.c @@ -14,10 +14,7 @@ asmlinkage void poly1305_p10le_4blocks(struct poly1305_block_state *state, const u8 *m, u32 mlen); asmlinkage void poly1305_64s(struct poly1305_block_state *state, const u8 *m, u32 mlen, int highbit); -asmlinkage void poly1305_emit_arch(const struct poly1305_state *state, - u8 digest[POLY1305_DIGEST_SIZE], - const u32 nonce[4]); -EXPORT_SYMBOL_GPL(poly1305_emit_arch); +asmlinkage void poly1305_emit_64(const struct poly1305_state *state, const u32 nonce[4], u8 digest[POLY1305_DIGEST_SIZE]); static __ro_after_init DEFINE_STATIC_KEY_FALSE(have_p10); @@ -65,6 +62,16 @@ void poly1305_blocks_arch(struct poly1305_block_state *state, const u8 *src, } EXPORT_SYMBOL_GPL(poly1305_blocks_arch); +void poly1305_emit_arch(const struct poly1305_state *state, + u8 digest[POLY1305_DIGEST_SIZE], + const u32 nonce[4]) +{ + if (!static_key_enabled(&have_p10)) + return poly1305_emit_generic(state, digest, nonce); + poly1305_emit_64(state, nonce, digest); +} +EXPORT_SYMBOL_GPL(poly1305_emit_arch); + bool poly1305_is_arch_optimized(void) { return static_key_enabled(&have_p10); diff --git a/arch/powerpc/lib/crypto/poly1305-p10le_64.S b/arch/powerpc/lib/crypto/poly1305-p10le_64.S index 2ba2911b80388..a3c1987f1ecd1 100644 --- a/arch/powerpc/lib/crypto/poly1305-p10le_64.S +++ b/arch/powerpc/lib/crypto/poly1305-p10le_64.S @@ -1030,7 +1030,7 @@ SYM_FUNC_END(poly1305_64s) # Input: r3 = h, r4 = s, r5 = mac # mac = h + s # -SYM_FUNC_START(poly1305_emit_arch) +SYM_FUNC_START(poly1305_emit_64) ld 10, 0(3) ld 11, 8(3) ld 12, 16(3) @@ -1060,7 +1060,7 @@ Skip_h64: std 10, 0(5) std 11, 8(5) blr -SYM_FUNC_END(poly1305_emit_arch) +SYM_FUNC_END(poly1305_emit_64) SYM_DATA_START_LOCAL(RMASK) .align 5