| From eee74cd96afd6a37a474a4c3188fa785109da2c0 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 12 Feb 2025 12:48:55 +0800 |
| Subject: crypto: lib/Kconfig - Fix lib built-in failure when arch is modular |
| |
| From: Herbert Xu <herbert@gondor.apana.org.au> |
| |
| [ Upstream commit 1047e21aecdf17c8a9ab9fd4bd24c6647453f93d ] |
| |
| The HAVE_ARCH Kconfig options in lib/crypto try to solve the |
| modular versus built-in problem, but it still fails when the |
| the LIB option (e.g., CRYPTO_LIB_CURVE25519) is selected externally. |
| |
| Fix this by introducing a level of indirection with ARCH_MAY_HAVE |
| Kconfig options, these then go on to select the ARCH_HAVE options |
| if the ARCH Kconfig options matches that of the LIB option. |
| |
| Reported-by: kernel test robot <lkp@intel.com> |
| Closes: https://lore.kernel.org/oe-kbuild-all/202501230223.ikroNDr1-lkp@intel.com/ |
| Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/arm/crypto/Kconfig | 6 +++--- |
| arch/powerpc/crypto/Kconfig | 4 ++-- |
| arch/x86/crypto/Kconfig | 6 +++--- |
| lib/crypto/Kconfig | 26 ++++++++++++++++++-------- |
| 4 files changed, 26 insertions(+), 16 deletions(-) |
| |
| diff --git a/arch/arm/crypto/Kconfig b/arch/arm/crypto/Kconfig |
| index 32650c8431d98..47d9cc59f254c 100644 |
| --- a/arch/arm/crypto/Kconfig |
| +++ b/arch/arm/crypto/Kconfig |
| @@ -6,7 +6,7 @@ config CRYPTO_CURVE25519_NEON |
| tristate "Public key crypto: Curve25519 (NEON)" |
| depends on KERNEL_MODE_NEON |
| select CRYPTO_LIB_CURVE25519_GENERIC |
| - select CRYPTO_ARCH_HAVE_LIB_CURVE25519 |
| + select CRYPTO_ARCH_MAY_HAVE_LIB_CURVE25519 |
| help |
| Curve25519 algorithm |
| |
| @@ -47,7 +47,7 @@ config CRYPTO_NHPOLY1305_NEON |
| config CRYPTO_POLY1305_ARM |
| tristate "Hash functions: Poly1305 (NEON)" |
| select CRYPTO_HASH |
| - select CRYPTO_ARCH_HAVE_LIB_POLY1305 |
| + select CRYPTO_ARCH_MAY_HAVE_LIB_POLY1305 |
| help |
| Poly1305 authenticator algorithm (RFC7539) |
| |
| @@ -214,7 +214,7 @@ config CRYPTO_AES_ARM_CE |
| config CRYPTO_CHACHA20_NEON |
| tristate "Ciphers: ChaCha20, XChaCha20, XChaCha12 (NEON)" |
| select CRYPTO_SKCIPHER |
| - select CRYPTO_ARCH_HAVE_LIB_CHACHA |
| + select CRYPTO_ARCH_MAY_HAVE_LIB_CHACHA |
| help |
| Length-preserving ciphers: ChaCha20, XChaCha20, and XChaCha12 |
| stream cipher algorithms |
| diff --git a/arch/powerpc/crypto/Kconfig b/arch/powerpc/crypto/Kconfig |
| index 5b315e9756b3f..e453cb0c82d2a 100644 |
| --- a/arch/powerpc/crypto/Kconfig |
| +++ b/arch/powerpc/crypto/Kconfig |
| @@ -6,7 +6,7 @@ config CRYPTO_CURVE25519_PPC64 |
| tristate "Public key crypto: Curve25519 (PowerPC64)" |
| depends on PPC64 && CPU_LITTLE_ENDIAN |
| select CRYPTO_LIB_CURVE25519_GENERIC |
| - select CRYPTO_ARCH_HAVE_LIB_CURVE25519 |
| + select CRYPTO_ARCH_MAY_HAVE_LIB_CURVE25519 |
| help |
| Curve25519 algorithm |
| |
| @@ -95,7 +95,7 @@ config CRYPTO_CHACHA20_P10 |
| depends on PPC64 && CPU_LITTLE_ENDIAN && VSX |
| select CRYPTO_SKCIPHER |
| select CRYPTO_LIB_CHACHA_GENERIC |
| - select CRYPTO_ARCH_HAVE_LIB_CHACHA |
| + select CRYPTO_ARCH_MAY_HAVE_LIB_CHACHA |
| help |
| Length-preserving ciphers: ChaCha20, XChaCha20, and XChaCha12 |
| stream cipher algorithms |
| diff --git a/arch/x86/crypto/Kconfig b/arch/x86/crypto/Kconfig |
| index 4757bf922075b..c189dad0969ba 100644 |
| --- a/arch/x86/crypto/Kconfig |
| +++ b/arch/x86/crypto/Kconfig |
| @@ -6,7 +6,7 @@ config CRYPTO_CURVE25519_X86 |
| tristate "Public key crypto: Curve25519 (ADX)" |
| depends on X86 && 64BIT |
| select CRYPTO_LIB_CURVE25519_GENERIC |
| - select CRYPTO_ARCH_HAVE_LIB_CURVE25519 |
| + select CRYPTO_ARCH_MAY_HAVE_LIB_CURVE25519 |
| help |
| Curve25519 algorithm |
| |
| @@ -352,7 +352,7 @@ config CRYPTO_CHACHA20_X86_64 |
| depends on X86 && 64BIT |
| select CRYPTO_SKCIPHER |
| select CRYPTO_LIB_CHACHA_GENERIC |
| - select CRYPTO_ARCH_HAVE_LIB_CHACHA |
| + select CRYPTO_ARCH_MAY_HAVE_LIB_CHACHA |
| help |
| Length-preserving ciphers: ChaCha20, XChaCha20, and XChaCha12 |
| stream cipher algorithms |
| @@ -420,7 +420,7 @@ config CRYPTO_POLY1305_X86_64 |
| tristate "Hash functions: Poly1305 (SSE2/AVX2)" |
| depends on X86 && 64BIT |
| select CRYPTO_LIB_POLY1305_GENERIC |
| - select CRYPTO_ARCH_HAVE_LIB_POLY1305 |
| + select CRYPTO_ARCH_MAY_HAVE_LIB_POLY1305 |
| help |
| Poly1305 authenticator algorithm (RFC7539) |
| |
| diff --git a/lib/crypto/Kconfig b/lib/crypto/Kconfig |
| index b01253cac70a7..c542ef1d64d03 100644 |
| --- a/lib/crypto/Kconfig |
| +++ b/lib/crypto/Kconfig |
| @@ -42,12 +42,17 @@ config CRYPTO_LIB_BLAKE2S_GENERIC |
| of CRYPTO_LIB_BLAKE2S. |
| |
| config CRYPTO_ARCH_HAVE_LIB_CHACHA |
| - tristate |
| + bool |
| help |
| Declares whether the architecture provides an arch-specific |
| accelerated implementation of the ChaCha library interface, |
| either builtin or as a module. |
| |
| +config CRYPTO_ARCH_MAY_HAVE_LIB_CHACHA |
| + tristate |
| + select CRYPTO_ARCH_HAVE_LIB_CHACHA if CRYPTO_LIB_CHACHA=m |
| + select CRYPTO_ARCH_HAVE_LIB_CHACHA if CRYPTO_ARCH_MAY_HAVE_LIB_CHACHA=y |
| + |
| config CRYPTO_LIB_CHACHA_GENERIC |
| tristate |
| select CRYPTO_LIB_UTILS |
| @@ -60,7 +65,6 @@ config CRYPTO_LIB_CHACHA_GENERIC |
| |
| config CRYPTO_LIB_CHACHA |
| tristate "ChaCha library interface" |
| - depends on CRYPTO_ARCH_HAVE_LIB_CHACHA || !CRYPTO_ARCH_HAVE_LIB_CHACHA |
| select CRYPTO_LIB_CHACHA_GENERIC if CRYPTO_ARCH_HAVE_LIB_CHACHA=n |
| help |
| Enable the ChaCha library interface. This interface may be fulfilled |
| @@ -68,12 +72,17 @@ config CRYPTO_LIB_CHACHA |
| is available and enabled. |
| |
| config CRYPTO_ARCH_HAVE_LIB_CURVE25519 |
| - tristate |
| + bool |
| help |
| Declares whether the architecture provides an arch-specific |
| accelerated implementation of the Curve25519 library interface, |
| either builtin or as a module. |
| |
| +config CRYPTO_ARCH_MAY_HAVE_LIB_CURVE25519 |
| + tristate |
| + select CRYPTO_ARCH_HAVE_LIB_CURVE25519 if CRYPTO_LIB_CURVE25519=m |
| + select CRYPTO_ARCH_HAVE_LIB_CURVE25519 if CRYPTO_ARCH_MAY_HAVE_LIB_CURVE25519=y |
| + |
| config CRYPTO_LIB_CURVE25519_GENERIC |
| tristate |
| help |
| @@ -85,7 +94,6 @@ config CRYPTO_LIB_CURVE25519_GENERIC |
| |
| config CRYPTO_LIB_CURVE25519 |
| tristate "Curve25519 scalar multiplication library" |
| - depends on CRYPTO_ARCH_HAVE_LIB_CURVE25519 || !CRYPTO_ARCH_HAVE_LIB_CURVE25519 |
| select CRYPTO_LIB_CURVE25519_GENERIC if CRYPTO_ARCH_HAVE_LIB_CURVE25519=n |
| select CRYPTO_LIB_UTILS |
| help |
| @@ -104,12 +112,17 @@ config CRYPTO_LIB_POLY1305_RSIZE |
| default 1 |
| |
| config CRYPTO_ARCH_HAVE_LIB_POLY1305 |
| - tristate |
| + bool |
| help |
| Declares whether the architecture provides an arch-specific |
| accelerated implementation of the Poly1305 library interface, |
| either builtin or as a module. |
| |
| +config CRYPTO_ARCH_MAY_HAVE_LIB_POLY1305 |
| + tristate |
| + select CRYPTO_ARCH_HAVE_LIB_POLY1305 if CRYPTO_LIB_POLY1305=m |
| + select CRYPTO_ARCH_HAVE_LIB_POLY1305 if CRYPTO_ARCH_MAY_HAVE_LIB_POLY1305=y |
| + |
| config CRYPTO_LIB_POLY1305_GENERIC |
| tristate |
| help |
| @@ -121,7 +134,6 @@ config CRYPTO_LIB_POLY1305_GENERIC |
| |
| config CRYPTO_LIB_POLY1305 |
| tristate "Poly1305 library interface" |
| - depends on CRYPTO_ARCH_HAVE_LIB_POLY1305 || !CRYPTO_ARCH_HAVE_LIB_POLY1305 |
| select CRYPTO_LIB_POLY1305_GENERIC if CRYPTO_ARCH_HAVE_LIB_POLY1305=n |
| help |
| Enable the Poly1305 library interface. This interface may be fulfilled |
| @@ -130,8 +142,6 @@ config CRYPTO_LIB_POLY1305 |
| |
| config CRYPTO_LIB_CHACHA20POLY1305 |
| tristate "ChaCha20-Poly1305 AEAD support (8-byte nonce library version)" |
| - depends on CRYPTO_ARCH_HAVE_LIB_CHACHA || !CRYPTO_ARCH_HAVE_LIB_CHACHA |
| - depends on CRYPTO_ARCH_HAVE_LIB_POLY1305 || !CRYPTO_ARCH_HAVE_LIB_POLY1305 |
| depends on CRYPTO |
| select CRYPTO_LIB_CHACHA |
| select CRYPTO_LIB_POLY1305 |
| -- |
| 2.39.5 |
| |