mirror of
https://github.com/Telecominfraproject/wlan-ap-legacy-targets.git
synced 2025-10-29 09:32:41 +00:00
173 lines
6.8 KiB
Diff
173 lines
6.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
From: Arnd Bergmann <arnd@arndb.de>
|
||
Date: Mon, 22 Mar 2021 18:05:15 +0100
|
||
Subject: [PATCH] crypto: poly1305 - fix poly1305_core_setkey() declaration
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
commit 8d195e7a8ada68928f2aedb2c18302a4518fe68e upstream.
|
||
|
||
gcc-11 points out a mismatch between the declaration and the definition
|
||
of poly1305_core_setkey():
|
||
|
||
lib/crypto/poly1305-donna32.c:13:67: error: argument 2 of type ‘const u8[16]’ {aka ‘const unsigned char[16]’} with mismatched bound [-Werror=array-parameter=]
|
||
13 | void poly1305_core_setkey(struct poly1305_core_key *key, const u8 raw_key[16])
|
||
| ~~~~~~~~~^~~~~~~~~~~
|
||
In file included from lib/crypto/poly1305-donna32.c:11:
|
||
include/crypto/internal/poly1305.h:21:68: note: previously declared as ‘const u8 *’ {aka ‘const unsigned char *’}
|
||
21 | void poly1305_core_setkey(struct poly1305_core_key *key, const u8 *raw_key);
|
||
|
||
This is harmless in principle, as the calling conventions are the same,
|
||
but the more specific prototype allows better type checking in the
|
||
caller.
|
||
|
||
Change the declaration to match the actual function definition.
|
||
The poly1305_simd_init() is a bit suspicious here, as it previously
|
||
had a 32-byte argument type, but looks like it needs to take the
|
||
16-byte POLY1305_BLOCK_SIZE array instead.
|
||
|
||
Fixes: 1c08a104360f ("crypto: poly1305 - add new 32 and 64-bit generic versions")
|
||
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
|
||
Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
|
||
Reviewed-by: Eric Biggers <ebiggers@google.com>
|
||
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
|
||
---
|
||
arch/arm/crypto/poly1305-glue.c | 2 +-
|
||
arch/arm64/crypto/poly1305-glue.c | 2 +-
|
||
arch/mips/crypto/poly1305-glue.c | 2 +-
|
||
arch/x86/crypto/poly1305_glue.c | 6 +++---
|
||
include/crypto/internal/poly1305.h | 3 ++-
|
||
include/crypto/poly1305.h | 6 ++++--
|
||
lib/crypto/poly1305-donna32.c | 3 ++-
|
||
lib/crypto/poly1305-donna64.c | 3 ++-
|
||
lib/crypto/poly1305.c | 3 ++-
|
||
9 files changed, 18 insertions(+), 12 deletions(-)
|
||
|
||
--- a/arch/arm/crypto/poly1305-glue.c
|
||
+++ b/arch/arm/crypto/poly1305-glue.c
|
||
@@ -29,7 +29,7 @@ void __weak poly1305_blocks_neon(void *s
|
||
|
||
static __ro_after_init DEFINE_STATIC_KEY_FALSE(have_neon);
|
||
|
||
-void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 *key)
|
||
+void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 key[POLY1305_KEY_SIZE])
|
||
{
|
||
poly1305_init_arm(&dctx->h, key);
|
||
dctx->s[0] = get_unaligned_le32(key + 16);
|
||
--- a/arch/arm64/crypto/poly1305-glue.c
|
||
+++ b/arch/arm64/crypto/poly1305-glue.c
|
||
@@ -25,7 +25,7 @@ asmlinkage void poly1305_emit(void *stat
|
||
|
||
static __ro_after_init DEFINE_STATIC_KEY_FALSE(have_neon);
|
||
|
||
-void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 *key)
|
||
+void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 key[POLY1305_KEY_SIZE])
|
||
{
|
||
poly1305_init_arm64(&dctx->h, key);
|
||
dctx->s[0] = get_unaligned_le32(key + 16);
|
||
--- a/arch/mips/crypto/poly1305-glue.c
|
||
+++ b/arch/mips/crypto/poly1305-glue.c
|
||
@@ -17,7 +17,7 @@ asmlinkage void poly1305_init_mips(void
|
||
asmlinkage void poly1305_blocks_mips(void *state, const u8 *src, u32 len, u32 hibit);
|
||
asmlinkage void poly1305_emit_mips(void *state, u8 *digest, const u32 *nonce);
|
||
|
||
-void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 *key)
|
||
+void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 key[POLY1305_KEY_SIZE])
|
||
{
|
||
poly1305_init_mips(&dctx->h, key);
|
||
dctx->s[0] = get_unaligned_le32(key + 16);
|
||
--- a/arch/x86/crypto/poly1305_glue.c
|
||
+++ b/arch/x86/crypto/poly1305_glue.c
|
||
@@ -15,7 +15,7 @@
|
||
#include <asm/simd.h>
|
||
|
||
asmlinkage void poly1305_init_x86_64(void *ctx,
|
||
- const u8 key[POLY1305_KEY_SIZE]);
|
||
+ const u8 key[POLY1305_BLOCK_SIZE]);
|
||
asmlinkage void poly1305_blocks_x86_64(void *ctx, const u8 *inp,
|
||
const size_t len, const u32 padbit);
|
||
asmlinkage void poly1305_emit_x86_64(void *ctx, u8 mac[POLY1305_DIGEST_SIZE],
|
||
@@ -80,7 +80,7 @@ static void convert_to_base2_64(void *ct
|
||
state->is_base2_26 = 0;
|
||
}
|
||
|
||
-static void poly1305_simd_init(void *ctx, const u8 key[POLY1305_KEY_SIZE])
|
||
+static void poly1305_simd_init(void *ctx, const u8 key[POLY1305_BLOCK_SIZE])
|
||
{
|
||
poly1305_init_x86_64(ctx, key);
|
||
}
|
||
@@ -128,7 +128,7 @@ static void poly1305_simd_emit(void *ctx
|
||
poly1305_emit_avx(ctx, mac, nonce);
|
||
}
|
||
|
||
-void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 *key)
|
||
+void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 key[POLY1305_KEY_SIZE])
|
||
{
|
||
poly1305_simd_init(&dctx->h, key);
|
||
dctx->s[0] = get_unaligned_le32(&key[16]);
|
||
--- a/include/crypto/internal/poly1305.h
|
||
+++ b/include/crypto/internal/poly1305.h
|
||
@@ -18,7 +18,8 @@
|
||
* only the ε-almost-∆-universal hash function (not the full MAC) is computed.
|
||
*/
|
||
|
||
-void poly1305_core_setkey(struct poly1305_core_key *key, const u8 *raw_key);
|
||
+void poly1305_core_setkey(struct poly1305_core_key *key,
|
||
+ const u8 raw_key[POLY1305_BLOCK_SIZE]);
|
||
static inline void poly1305_core_init(struct poly1305_state *state)
|
||
{
|
||
*state = (struct poly1305_state){};
|
||
--- a/include/crypto/poly1305.h
|
||
+++ b/include/crypto/poly1305.h
|
||
@@ -58,8 +58,10 @@ struct poly1305_desc_ctx {
|
||
};
|
||
};
|
||
|
||
-void poly1305_init_arch(struct poly1305_desc_ctx *desc, const u8 *key);
|
||
-void poly1305_init_generic(struct poly1305_desc_ctx *desc, const u8 *key);
|
||
+void poly1305_init_arch(struct poly1305_desc_ctx *desc,
|
||
+ const u8 key[POLY1305_KEY_SIZE]);
|
||
+void poly1305_init_generic(struct poly1305_desc_ctx *desc,
|
||
+ const u8 key[POLY1305_KEY_SIZE]);
|
||
|
||
static inline void poly1305_init(struct poly1305_desc_ctx *desc, const u8 *key)
|
||
{
|
||
--- a/lib/crypto/poly1305-donna32.c
|
||
+++ b/lib/crypto/poly1305-donna32.c
|
||
@@ -10,7 +10,8 @@
|
||
#include <asm/unaligned.h>
|
||
#include <crypto/internal/poly1305.h>
|
||
|
||
-void poly1305_core_setkey(struct poly1305_core_key *key, const u8 raw_key[16])
|
||
+void poly1305_core_setkey(struct poly1305_core_key *key,
|
||
+ const u8 raw_key[POLY1305_BLOCK_SIZE])
|
||
{
|
||
/* r &= 0xffffffc0ffffffc0ffffffc0fffffff */
|
||
key->key.r[0] = (get_unaligned_le32(&raw_key[0])) & 0x3ffffff;
|
||
--- a/lib/crypto/poly1305-donna64.c
|
||
+++ b/lib/crypto/poly1305-donna64.c
|
||
@@ -12,7 +12,8 @@
|
||
|
||
typedef __uint128_t u128;
|
||
|
||
-void poly1305_core_setkey(struct poly1305_core_key *key, const u8 raw_key[16])
|
||
+void poly1305_core_setkey(struct poly1305_core_key *key,
|
||
+ const u8 raw_key[POLY1305_BLOCK_SIZE])
|
||
{
|
||
u64 t0, t1;
|
||
|
||
--- a/lib/crypto/poly1305.c
|
||
+++ b/lib/crypto/poly1305.c
|
||
@@ -12,7 +12,8 @@
|
||
#include <linux/module.h>
|
||
#include <asm/unaligned.h>
|
||
|
||
-void poly1305_init_generic(struct poly1305_desc_ctx *desc, const u8 *key)
|
||
+void poly1305_init_generic(struct poly1305_desc_ctx *desc,
|
||
+ const u8 key[POLY1305_KEY_SIZE])
|
||
{
|
||
poly1305_core_setkey(&desc->core_r, key);
|
||
desc->s[0] = get_unaligned_le32(key + 16);
|