Skip to content

Commit 17ec3e7

Browse files
committed
crypto: lib/Kconfig - Hide arch options from user
The ARCH_MAY_HAVE patch missed arm64, mips and s390. But it may also lead to arch options being enabled but ineffective because of modular/built-in conflicts. As the primary user of all these options wireguard is selecting the arch options anyway, make the same selections at the lib/crypto option level and hide the arch options from the user. Instead of selecting them centrally from lib/crypto, simply set the default of each arch option as suggested by Eric Biggers. Change the Crypto API generic algorithms to select the top-level lib/crypto options instead of the generic one as otherwise there is no way to enable the arch options (Eric Biggers). Introduce a set of INTERNAL options to work around dependency cycles on the CONFIG_CRYPTO symbol. Fixes: 1047e21 ("crypto: lib/Kconfig - Fix lib built-in failure when arch is modular") Reported-by: kernel test robot <[email protected]> Reported-by: Arnd Bergmann <[email protected]> Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/ Signed-off-by: Herbert Xu <[email protected]>
1 parent f79d2d2 commit 17ec3e7

File tree

9 files changed

+63
-45
lines changed

9 files changed

+63
-45
lines changed

arch/arm/crypto/Kconfig

+10-6
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
menu "Accelerated Cryptographic Algorithms for CPU (arm)"
44

55
config CRYPTO_CURVE25519_NEON
6-
tristate "Public key crypto: Curve25519 (NEON)"
6+
tristate
77
depends on KERNEL_MODE_NEON
8+
select CRYPTO_KPP
89
select CRYPTO_LIB_CURVE25519_GENERIC
9-
select CRYPTO_ARCH_MAY_HAVE_LIB_CURVE25519
10+
select CRYPTO_ARCH_HAVE_LIB_CURVE25519
11+
default CRYPTO_LIB_CURVE25519_INTERNAL
1012
help
1113
Curve25519 algorithm
1214

@@ -45,9 +47,10 @@ config CRYPTO_NHPOLY1305_NEON
4547
- NEON (Advanced SIMD) extensions
4648

4749
config CRYPTO_POLY1305_ARM
48-
tristate "Hash functions: Poly1305 (NEON)"
50+
tristate
4951
select CRYPTO_HASH
50-
select CRYPTO_ARCH_MAY_HAVE_LIB_POLY1305
52+
select CRYPTO_ARCH_HAVE_LIB_POLY1305
53+
default CRYPTO_LIB_POLY1305_INTERNAL
5154
help
5255
Poly1305 authenticator algorithm (RFC7539)
5356

@@ -212,9 +215,10 @@ config CRYPTO_AES_ARM_CE
212215
- ARMv8 Crypto Extensions
213216

214217
config CRYPTO_CHACHA20_NEON
215-
tristate "Ciphers: ChaCha20, XChaCha20, XChaCha12 (NEON)"
218+
tristate
216219
select CRYPTO_SKCIPHER
217-
select CRYPTO_ARCH_MAY_HAVE_LIB_CHACHA
220+
select CRYPTO_ARCH_HAVE_LIB_CHACHA
221+
default CRYPTO_LIB_CHACHA_INTERNAL
218222
help
219223
Length-preserving ciphers: ChaCha20, XChaCha20, and XChaCha12
220224
stream cipher algorithms

arch/arm64/crypto/Kconfig

+4-2
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,11 @@ config CRYPTO_NHPOLY1305_NEON
2626
- NEON (Advanced SIMD) extensions
2727

2828
config CRYPTO_POLY1305_NEON
29-
tristate "Hash functions: Poly1305 (NEON)"
29+
tristate
3030
depends on KERNEL_MODE_NEON
3131
select CRYPTO_HASH
3232
select CRYPTO_ARCH_HAVE_LIB_POLY1305
33+
default CRYPTO_LIB_POLY1305_INTERNAL
3334
help
3435
Poly1305 authenticator algorithm (RFC7539)
3536

@@ -186,11 +187,12 @@ config CRYPTO_AES_ARM64_NEON_BLK
186187
- NEON (Advanced SIMD) extensions
187188

188189
config CRYPTO_CHACHA20_NEON
189-
tristate "Ciphers: ChaCha (NEON)"
190+
tristate
190191
depends on KERNEL_MODE_NEON
191192
select CRYPTO_SKCIPHER
192193
select CRYPTO_LIB_CHACHA_GENERIC
193194
select CRYPTO_ARCH_HAVE_LIB_CHACHA
195+
default CRYPTO_LIB_CHACHA_INTERNAL
194196
help
195197
Length-preserving ciphers: ChaCha20, XChaCha20, and XChaCha12
196198
stream cipher algorithms

arch/mips/crypto/Kconfig

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
menu "Accelerated Cryptographic Algorithms for CPU (mips)"
44

55
config CRYPTO_POLY1305_MIPS
6-
tristate "Hash functions: Poly1305"
6+
tristate
77
depends on MIPS
8+
select CRYPTO_HASH
89
select CRYPTO_ARCH_HAVE_LIB_POLY1305
10+
default CRYPTO_LIB_POLY1305_INTERNAL
911
help
1012
Poly1305 authenticator algorithm (RFC7539)
1113

@@ -52,10 +54,11 @@ config CRYPTO_SHA512_OCTEON
5254
Architecture: mips OCTEON using crypto instructions, when available
5355

5456
config CRYPTO_CHACHA_MIPS
55-
tristate "Ciphers: ChaCha20, XChaCha20, XChaCha12 (MIPS32r2)"
57+
tristate
5658
depends on CPU_MIPS32_R2
5759
select CRYPTO_SKCIPHER
5860
select CRYPTO_ARCH_HAVE_LIB_CHACHA
61+
default CRYPTO_LIB_CHACHA_INTERNAL
5962
help
6063
Length-preserving ciphers: ChaCha20, XChaCha20, and XChaCha12
6164
stream cipher algorithms

arch/powerpc/crypto/Kconfig

+7-4
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
menu "Accelerated Cryptographic Algorithms for CPU (powerpc)"
44

55
config CRYPTO_CURVE25519_PPC64
6-
tristate "Public key crypto: Curve25519 (PowerPC64)"
6+
tristate
77
depends on PPC64 && CPU_LITTLE_ENDIAN
8+
select CRYPTO_KPP
89
select CRYPTO_LIB_CURVE25519_GENERIC
9-
select CRYPTO_ARCH_MAY_HAVE_LIB_CURVE25519
10+
select CRYPTO_ARCH_HAVE_LIB_CURVE25519
11+
default CRYPTO_LIB_CURVE25519_INTERNAL
1012
help
1113
Curve25519 algorithm
1214

@@ -91,11 +93,12 @@ config CRYPTO_AES_GCM_P10
9193
later CPU. This module supports stitched acceleration for AES/GCM.
9294

9395
config CRYPTO_CHACHA20_P10
94-
tristate "Ciphers: ChaCha20, XChacha20, XChacha12 (P10 or later)"
96+
tristate
9597
depends on PPC64 && CPU_LITTLE_ENDIAN && VSX
9698
select CRYPTO_SKCIPHER
9799
select CRYPTO_LIB_CHACHA_GENERIC
98-
select CRYPTO_ARCH_MAY_HAVE_LIB_CHACHA
100+
select CRYPTO_ARCH_HAVE_LIB_CHACHA
101+
default CRYPTO_LIB_CHACHA_INTERNAL
99102
help
100103
Length-preserving ciphers: ChaCha20, XChaCha20, and XChaCha12
101104
stream cipher algorithms

arch/riscv/crypto/Kconfig

-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ config CRYPTO_CHACHA_RISCV64
2222
tristate "Ciphers: ChaCha"
2323
depends on 64BIT && RISCV_ISA_V && TOOLCHAIN_HAS_VECTOR_CRYPTO
2424
select CRYPTO_SKCIPHER
25-
select CRYPTO_LIB_CHACHA_GENERIC
2625
help
2726
Length-preserving ciphers: ChaCha20 stream cipher algorithm
2827

arch/s390/crypto/Kconfig

+2-1
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,12 @@ config CRYPTO_DES_S390
108108
As of z196 the CTR mode is hardware accelerated.
109109

110110
config CRYPTO_CHACHA_S390
111-
tristate "Ciphers: ChaCha20"
111+
tristate
112112
depends on S390
113113
select CRYPTO_SKCIPHER
114114
select CRYPTO_LIB_CHACHA_GENERIC
115115
select CRYPTO_ARCH_HAVE_LIB_CHACHA
116+
default CRYPTO_LIB_CHACHA_INTERNAL
116117
help
117118
Length-preserving cipher: ChaCha20 stream cipher (RFC 7539)
118119

arch/x86/crypto/Kconfig

+11-6
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
menu "Accelerated Cryptographic Algorithms for CPU (x86)"
44

55
config CRYPTO_CURVE25519_X86
6-
tristate "Public key crypto: Curve25519 (ADX)"
6+
tristate
77
depends on X86 && 64BIT
8+
select CRYPTO_KPP
89
select CRYPTO_LIB_CURVE25519_GENERIC
9-
select CRYPTO_ARCH_MAY_HAVE_LIB_CURVE25519
10+
select CRYPTO_ARCH_HAVE_LIB_CURVE25519
11+
default CRYPTO_LIB_CURVE25519_INTERNAL
1012
help
1113
Curve25519 algorithm
1214

@@ -348,11 +350,12 @@ config CRYPTO_ARIA_GFNI_AVX512_X86_64
348350
Processes 64 blocks in parallel.
349351

350352
config CRYPTO_CHACHA20_X86_64
351-
tristate "Ciphers: ChaCha20, XChaCha20, XChaCha12 (SSSE3/AVX2/AVX-512VL)"
353+
tristate
352354
depends on X86 && 64BIT
353355
select CRYPTO_SKCIPHER
354356
select CRYPTO_LIB_CHACHA_GENERIC
355-
select CRYPTO_ARCH_MAY_HAVE_LIB_CHACHA
357+
select CRYPTO_ARCH_HAVE_LIB_CHACHA
358+
default CRYPTO_LIB_CHACHA_INTERNAL
356359
help
357360
Length-preserving ciphers: ChaCha20, XChaCha20, and XChaCha12
358361
stream cipher algorithms
@@ -417,10 +420,12 @@ config CRYPTO_POLYVAL_CLMUL_NI
417420
- CLMUL-NI (carry-less multiplication new instructions)
418421

419422
config CRYPTO_POLY1305_X86_64
420-
tristate "Hash functions: Poly1305 (SSE2/AVX2)"
423+
tristate
421424
depends on X86 && 64BIT
425+
select CRYPTO_HASH
422426
select CRYPTO_LIB_POLY1305_GENERIC
423-
select CRYPTO_ARCH_MAY_HAVE_LIB_POLY1305
427+
select CRYPTO_ARCH_HAVE_LIB_POLY1305
428+
default CRYPTO_LIB_POLY1305_INTERNAL
424429
help
425430
Poly1305 authenticator algorithm (RFC7539)
426431

crypto/Kconfig

+3-3
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ config CRYPTO_ECRDSA
317317
config CRYPTO_CURVE25519
318318
tristate "Curve25519"
319319
select CRYPTO_KPP
320-
select CRYPTO_LIB_CURVE25519_GENERIC
320+
select CRYPTO_LIB_CURVE25519_INTERNAL
321321
help
322322
Curve25519 elliptic curve (RFC7748)
323323

@@ -615,7 +615,7 @@ config CRYPTO_ARC4
615615

616616
config CRYPTO_CHACHA20
617617
tristate "ChaCha"
618-
select CRYPTO_LIB_CHACHA_GENERIC
618+
select CRYPTO_LIB_CHACHA_INTERNAL
619619
select CRYPTO_SKCIPHER
620620
help
621621
The ChaCha20, XChaCha20, and XChaCha12 stream cipher algorithms
@@ -936,7 +936,7 @@ config CRYPTO_POLYVAL
936936
config CRYPTO_POLY1305
937937
tristate "Poly1305"
938938
select CRYPTO_HASH
939-
select CRYPTO_LIB_POLY1305_GENERIC
939+
select CRYPTO_LIB_POLY1305_INTERNAL
940940
help
941941
Poly1305 authenticator algorithm (RFC7539)
942942

lib/crypto/Kconfig

+21-20
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,6 @@ config CRYPTO_ARCH_HAVE_LIB_CHACHA
4848
accelerated implementation of the ChaCha library interface,
4949
either builtin or as a module.
5050

51-
config CRYPTO_ARCH_MAY_HAVE_LIB_CHACHA
52-
tristate
53-
select CRYPTO_ARCH_HAVE_LIB_CHACHA if CRYPTO_LIB_CHACHA=m
54-
select CRYPTO_ARCH_HAVE_LIB_CHACHA if CRYPTO_ARCH_MAY_HAVE_LIB_CHACHA=y
55-
5651
config CRYPTO_LIB_CHACHA_GENERIC
5752
tristate
5853
select CRYPTO_LIB_UTILS
@@ -63,9 +58,14 @@ config CRYPTO_LIB_CHACHA_GENERIC
6358
implementation is enabled, this implementation serves the users
6459
of CRYPTO_LIB_CHACHA.
6560

61+
config CRYPTO_LIB_CHACHA_INTERNAL
62+
tristate
63+
select CRYPTO_LIB_CHACHA_GENERIC if CRYPTO_ARCH_HAVE_LIB_CHACHA=n
64+
6665
config CRYPTO_LIB_CHACHA
6766
tristate "ChaCha library interface"
68-
select CRYPTO_LIB_CHACHA_GENERIC if CRYPTO_ARCH_HAVE_LIB_CHACHA=n
67+
select CRYPTO
68+
select CRYPTO_LIB_CHACHA_INTERNAL
6969
help
7070
Enable the ChaCha library interface. This interface may be fulfilled
7171
by either the generic implementation or an arch-specific one, if one
@@ -78,24 +78,24 @@ config CRYPTO_ARCH_HAVE_LIB_CURVE25519
7878
accelerated implementation of the Curve25519 library interface,
7979
either builtin or as a module.
8080

81-
config CRYPTO_ARCH_MAY_HAVE_LIB_CURVE25519
82-
tristate
83-
select CRYPTO_ARCH_HAVE_LIB_CURVE25519 if CRYPTO_LIB_CURVE25519=m
84-
select CRYPTO_ARCH_HAVE_LIB_CURVE25519 if CRYPTO_ARCH_MAY_HAVE_LIB_CURVE25519=y
85-
8681
config CRYPTO_LIB_CURVE25519_GENERIC
8782
tristate
83+
select CRYPTO_LIB_UTILS
8884
help
8985
This symbol can be depended upon by arch implementations of the
9086
Curve25519 library interface that require the generic code as a
9187
fallback, e.g., for SIMD implementations. If no arch specific
9288
implementation is enabled, this implementation serves the users
9389
of CRYPTO_LIB_CURVE25519.
9490

91+
config CRYPTO_LIB_CURVE25519_INTERNAL
92+
tristate
93+
select CRYPTO_LIB_CURVE25519_GENERIC if CRYPTO_ARCH_HAVE_LIB_CURVE25519=n
94+
9595
config CRYPTO_LIB_CURVE25519
9696
tristate "Curve25519 scalar multiplication library"
97-
select CRYPTO_LIB_CURVE25519_GENERIC if CRYPTO_ARCH_HAVE_LIB_CURVE25519=n
98-
select CRYPTO_LIB_UTILS
97+
select CRYPTO
98+
select CRYPTO_LIB_CURVE25519_INTERNAL
9999
help
100100
Enable the Curve25519 library interface. This interface may be
101101
fulfilled by either the generic implementation or an arch-specific
@@ -118,11 +118,6 @@ config CRYPTO_ARCH_HAVE_LIB_POLY1305
118118
accelerated implementation of the Poly1305 library interface,
119119
either builtin or as a module.
120120

121-
config CRYPTO_ARCH_MAY_HAVE_LIB_POLY1305
122-
tristate
123-
select CRYPTO_ARCH_HAVE_LIB_POLY1305 if CRYPTO_LIB_POLY1305=m
124-
select CRYPTO_ARCH_HAVE_LIB_POLY1305 if CRYPTO_ARCH_MAY_HAVE_LIB_POLY1305=y
125-
126121
config CRYPTO_LIB_POLY1305_GENERIC
127122
tristate
128123
help
@@ -132,19 +127,25 @@ config CRYPTO_LIB_POLY1305_GENERIC
132127
implementation is enabled, this implementation serves the users
133128
of CRYPTO_LIB_POLY1305.
134129

130+
config CRYPTO_LIB_POLY1305_INTERNAL
131+
tristate
132+
select CRYPTO_LIB_POLY1305_GENERIC if CRYPTO_ARCH_HAVE_LIB_POLY1305=n
133+
135134
config CRYPTO_LIB_POLY1305
136135
tristate "Poly1305 library interface"
137-
select CRYPTO_LIB_POLY1305_GENERIC if CRYPTO_ARCH_HAVE_LIB_POLY1305=n
136+
select CRYPTO
137+
select CRYPTO_LIB_POLY1305_INTERNAL
138138
help
139139
Enable the Poly1305 library interface. This interface may be fulfilled
140140
by either the generic implementation or an arch-specific one, if one
141141
is available and enabled.
142142

143143
config CRYPTO_LIB_CHACHA20POLY1305
144144
tristate "ChaCha20-Poly1305 AEAD support (8-byte nonce library version)"
145-
depends on CRYPTO
145+
select CRYPTO
146146
select CRYPTO_LIB_CHACHA
147147
select CRYPTO_LIB_POLY1305
148+
select CRYPTO_LIB_UTILS
148149
select CRYPTO_ALGAPI
149150

150151
config CRYPTO_LIB_SHA1

0 commit comments

Comments
 (0)