Skip to contentSkip to conversation

crypto: fix dependencies on lib/crypto modules

PATCH In review Arnd Bergmann 3 participants 5 messages Mar 10, 2025 – Mar 11, 2025

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/2 crypto: fix dependencies on lib/crypto modules

From: Arnd Bergmann <[email protected]>

The crypto subsystem helpers for chacha, poly1305 and curve25519 were changed to select the 'INTERNAL' Kconfig symbols, but the code references the generic implementation instead, which leads to a link failure when nothing else selects it.

ld.lld-21: error: undefined symbol: chacha_crypt_generic

Quoted 2 lines
Quoted 2 lines
Quoted 2 lines

referenced by chacha_generic.c
crypto/chacha_generic.o:(chacha_stream_xor) in archive vmlinux.a

ld.lld-21: error: undefined symbol: poly1305_final_generic

Quoted 2 lines
Quoted 2 lines
Quoted 2 lines

referenced by poly1305_generic.c
crypto/poly1305_generic.o:(crypto_poly1305_final) in archive vmlinux.a

The INTERNAL version turns on the architecture specific optimized cipher, which normally usually also enables the generic version, but this is not the case on all architectures. Selecting only the GENERIC version here is not sufficient since the architecture specific ones are now hidden symbols and are only built when the INTERNAL symbol is also available.

Fixes 17ec3e71ba79 ("crypto: lib/Kconfig - Hide arch options from user")
---
 crypto/Kconfig | 3 +++
 1 file changed, 3 insertions(+)
crypto/Kconfig +3 -0
index aac27a4668fd..76693e3edff8 100644
@@ -317,6 +317,7 @@ config CRYPTO_ECRDSA
 config CRYPTO_CURVE25519
 	tristate "Curve25519"
 	select CRYPTO_KPP
+	select CRYPTO_LIB_CURVE25519_GENERIC
 	select CRYPTO_LIB_CURVE25519_INTERNAL
 	help
 	  Curve25519 elliptic curve (RFC7748)
@@ -615,6 +616,7 @@ config CRYPTO_ARC4
 
 config CRYPTO_CHACHA20
 	tristate "ChaCha"
+	select CRYPTO_LIB_CHACHA_GENERIC
 	select CRYPTO_LIB_CHACHA_INTERNAL
 	select CRYPTO_SKCIPHER
 	help
@@ -936,6 +938,7 @@ config CRYPTO_POLYVAL
 config CRYPTO_POLY1305
 	tristate "Poly1305"
 	select CRYPTO_HASH
+	select CRYPTO_LIB_POLY1305_GENERIC
 	select CRYPTO_LIB_POLY1305_INTERNAL
 	help
 	  Poly1305 authenticator algorithm (RFC7539)
Signature · 1 line
2.39.5
#1 lore raw

PATCH 2/2 crypto: lib/Kconfig: hide library options

From: Arnd Bergmann <[email protected]>

Any driver that needs these library functions should already be selecting the corresponding Kconfig symbols, so there is no real point in making these visible.

The original patch that made these user selectable described problems with drivers failing to select the code they use, but as far as I can tell, those were all bugs that got solved in the meantime and did not get solved by that patch.

Fixes e56e18985596 ("lib/crypto: add prompts back to crypto libraries")

----
This does not actually fix a build failure, but I noticed that the user visible options don't really make sense. Feel free to ignore this one.

---
 lib/crypto/Kconfig | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
lib/crypto/Kconfig +4 -4
index 17322f871586..798972b29b68 100644
@@ -63,7 +63,7 @@ config CRYPTO_LIB_CHACHA_INTERNAL
 	select CRYPTO_LIB_CHACHA_GENERIC if CRYPTO_ARCH_HAVE_LIB_CHACHA=n
 
 config CRYPTO_LIB_CHACHA
-	tristate "ChaCha library interface"
+	tristate
 	select CRYPTO
 	select CRYPTO_LIB_CHACHA_INTERNAL
 	help
@@ -93,7 +93,7 @@ config CRYPTO_LIB_CURVE25519_INTERNAL
 	select CRYPTO_LIB_CURVE25519_GENERIC if CRYPTO_ARCH_HAVE_LIB_CURVE25519=n
 
 config CRYPTO_LIB_CURVE25519
-	tristate "Curve25519 scalar multiplication library"
+	tristate
 	select CRYPTO
 	select CRYPTO_LIB_CURVE25519_INTERNAL
 	help
@@ -132,7 +132,7 @@ config CRYPTO_LIB_POLY1305_INTERNAL
 	select CRYPTO_LIB_POLY1305_GENERIC if CRYPTO_ARCH_HAVE_LIB_POLY1305=n
 
 config CRYPTO_LIB_POLY1305
-	tristate "Poly1305 library interface"
+	tristate
 	select CRYPTO
 	select CRYPTO_LIB_POLY1305_INTERNAL
 	help
@@ -141,7 +141,7 @@ config CRYPTO_LIB_POLY1305
 	  is available and enabled.
 
 config CRYPTO_LIB_CHACHA20POLY1305
-	tristate "ChaCha20-Poly1305 AEAD support (8-byte nonce library version)"
+	tristate
 	select CRYPTO_LIB_CHACHA
 	select CRYPTO_LIB_POLY1305
 	select CRYPTO_LIB_UTILS
Signature · 1 line
2.39.5
maintainer Acked-by on v1 2/2
#2 lore raw

Re: [PATCH 2/2] crypto: lib/Kconfig: hide library options

Quoted 11 lines · Arnd Bergmann

From: Arnd Bergmann <[email protected]>

Any driver that needs these library functions should already be selecting the corresponding Kconfig symbols, so there is no real point in making these visible.

The original patch that made these user selectable described problems with drivers failing to select the code they use, but as far as I can tell, those were all bugs that got solved in the meantime and did not get solved by that patch.

Quoted 6 lines
Fixes e56e18985596 ("lib/crypto: add prompts back to crypto libraries")

----
This does not actually fix a build failure, but I noticed that the user visible options don't really make sense. Feel free to ignore this one.

But I think the following needs to be fixed first:

config BIG_KEYS
bool "Large payload keys"
depends on KEYS
depends on TMPFS
depends on CRYPTO_LIB_CHACHA20POLY1305 = y

- Eric

maintainer
#3 lore raw
In reply to Arnd Bergmann
Quoted 48 lines · Arnd Bergmann

From: Arnd Bergmann <[email protected]>

The crypto subsystem helpers for chacha, poly1305 and curve25519 were changed to select the 'INTERNAL' Kconfig symbols, but the code references the generic implementation instead, which leads to a link failure when nothing else selects it.

ld.lld-21: error: undefined symbol: chacha_crypt_generic

Quoted 2 lines
Quoted 2 lines
Quoted 2 lines

referenced by chacha_generic.c
crypto/chacha_generic.o:(chacha_stream_xor) in archive vmlinux.a

ld.lld-21: error: undefined symbol: poly1305_final_generic

Quoted 2 lines
Quoted 2 lines
Quoted 2 lines

referenced by poly1305_generic.c
crypto/poly1305_generic.o:(crypto_poly1305_final) in archive vmlinux.a

The INTERNAL version turns on the architecture specific optimized cipher, which normally usually also enables the generic version, but this is not the case on all architectures. Selecting only the GENERIC version here is not sufficient since the architecture specific ones are now hidden symbols and are only built when the INTERNAL symbol is also available.

Fixes 17ec3e71ba79 ("crypto: lib/Kconfig - Hide arch options from user")
---
 crypto/Kconfig | 3 +++
 1 file changed, 3 insertions(+)
crypto/Kconfig +2 -0
index aac27a4668fd..76693e3edff8 100644
@@ -317,6 +317,7 @@ config CRYPTO_ECRDSA
 config CRYPTO_CURVE25519
 	tristate "Curve25519"
 	select CRYPTO_KPP
+	select CRYPTO_LIB_CURVE25519_GENERIC
 	select CRYPTO_LIB_CURVE25519_INTERNAL
 	help
 	  Curve25519 elliptic curve (RFC7748)
@@ -615,6 +616,7 @@ config CRYPTO_ARC4
 
 config CRYPTO_CHACHA20
 	tristate "ChaCha"
+	select CRYPTO_LIB_CHACHA_GENERIC
 	select CRYPTO_LIB_CHACHA_INTERNAL
 	select CRYPTO_SKCIPHER
 	help

crypto/Kconfig config CRYPTO_POLYVAL · line 944

Quoted 7 lines
crypto/Kconfig +1 -0
@@ -936,6 +938,7 @@ config CRYPTO_POLYVAL
 config CRYPTO_POLY1305
 	tristate "Poly1305"
 	select CRYPTO_HASH
+	select CRYPTO_LIB_POLY1305_GENERIC
 	select CRYPTO_LIB_POLY1305_INTERNAL
 	help
 	  Poly1305 authenticator algorithm (RFC7539)

Looks the same as
https://lore.kernel.org/linux-crypto/[email protected]/ which was already applied.

- Eric