]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
crypto: testmgr - replace CRYPTO_MANAGER_DISABLE_TESTS with CRYPTO_SELFTESTS
authorEric Biggers <ebiggers@google.com>
Mon, 5 May 2025 20:33:41 +0000 (13:33 -0700)
committerHerbert Xu <herbert@gondor.apana.org.au>
Mon, 12 May 2025 05:33:14 +0000 (13:33 +0800)
The negative-sense of CRYPTO_MANAGER_DISABLE_TESTS is a longstanding
mistake that regularly causes confusion.  Especially bad is that you can
have CRYPTO=n && CRYPTO_MANAGER_DISABLE_TESTS=n, which is ambiguous.

Replace CRYPTO_MANAGER_DISABLE_TESTS with CRYPTO_SELFTESTS which has the
expected behavior.

The tests continue to be disabled by default.

Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
18 files changed:
arch/arm/configs/milbeaut_m10v_defconfig
arch/loongarch/configs/loongson3_defconfig
arch/s390/configs/debug_defconfig
arch/s390/configs/defconfig
crypto/Kconfig
crypto/algapi.c
crypto/algboss.c
crypto/api.c
crypto/hkdf.c
crypto/internal.h
crypto/kdf_sp800108.c
crypto/testmgr.c
lib/crypto/Makefile
lib/crypto/aescfb.c
lib/crypto/aesgcm.c
lib/crypto/blake2s.c
lib/crypto/chacha20poly1305.c
lib/crypto/curve25519.c

index 4ec21f477c633a0b6c4168012b50db7d7d7f36e6..9dd47e1d90bb2f70b1a13652aecc448a48eebb8c 100644 (file)
@@ -94,7 +94,7 @@ CONFIG_NLS_ISO8859_1=y
 CONFIG_NLS_UTF8=y
 CONFIG_KEYS=y
 CONFIG_CRYPTO_MANAGER=y
-# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
+CONFIG_CRYPTO_SELFTESTS=y
 # CONFIG_CRYPTO_ECHAINIV is not set
 CONFIG_CRYPTO_AES=y
 CONFIG_CRYPTO_SEQIV=m
index 90f21dfe22b13a01e3ac6e46bde1876281a03c5a..0d59af6007b7aabbd0056f70095b6acea8f892bd 100644 (file)
@@ -1026,7 +1026,7 @@ CONFIG_SECURITY_APPARMOR=y
 CONFIG_SECURITY_YAMA=y
 CONFIG_DEFAULT_SECURITY_DAC=y
 CONFIG_CRYPTO_USER=m
-# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
+CONFIG_CRYPTO_SELFTESTS=y
 CONFIG_CRYPTO_PCRYPT=m
 CONFIG_CRYPTO_CRYPTD=m
 CONFIG_CRYPTO_ANUBIS=m
index e6f7c8f4ee8b8de74509f8730f8ecdbae1ce66ae..bc960b1eabaef67914189bbc1475e4ad0f1ade28 100644 (file)
@@ -743,7 +743,7 @@ CONFIG_IMA_WRITE_POLICY=y
 CONFIG_IMA_APPRAISE=y
 CONFIG_BUG_ON_DATA_CORRUPTION=y
 CONFIG_CRYPTO_USER=m
-# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
+CONFIG_CRYPTO_SELFTESTS=y
 CONFIG_CRYPTO_PCRYPT=m
 CONFIG_CRYPTO_CRYPTD=m
 CONFIG_CRYPTO_BENCHMARK=m
index 7495bf8e483c6ced9a5afeda6e53b3bd9e1216eb..fda2f264e7d38c135cfd778963abc553aaf80964 100644 (file)
@@ -729,7 +729,7 @@ CONFIG_IMA_APPRAISE=y
 CONFIG_BUG_ON_DATA_CORRUPTION=y
 CONFIG_CRYPTO_FIPS=y
 CONFIG_CRYPTO_USER=m
-# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
+CONFIG_CRYPTO_SELFTESTS=y
 CONFIG_CRYPTO_PCRYPT=m
 CONFIG_CRYPTO_CRYPTD=m
 CONFIG_CRYPTO_BENCHMARK=m
index 08af9de30ff06adf15eeb9f8a0381ff481bec937..d326d3c5544fcd16944ad3cf0d72866ab3515e47 100644 (file)
@@ -25,7 +25,7 @@ menu "Crypto core or helper"
 
 config CRYPTO_FIPS
        bool "FIPS 200 compliance"
-       depends on (CRYPTO_ANSI_CPRNG || CRYPTO_DRBG) && !CRYPTO_MANAGER_DISABLE_TESTS
+       depends on (CRYPTO_ANSI_CPRNG || CRYPTO_DRBG) && CRYPTO_SELFTESTS
        depends on (MODULE_SIG || !MODULES)
        help
          This option enables the fips boot option which is
@@ -143,8 +143,8 @@ config CRYPTO_ACOMP
 
 config CRYPTO_HKDF
        tristate
-       select CRYPTO_SHA256 if !CONFIG_CRYPTO_MANAGER_DISABLE_TESTS
-       select CRYPTO_SHA512 if !CONFIG_CRYPTO_MANAGER_DISABLE_TESTS
+       select CRYPTO_SHA256 if CRYPTO_SELFTESTS
+       select CRYPTO_SHA512 if CRYPTO_SELFTESTS
        select CRYPTO_HASH2
 
 config CRYPTO_MANAGER
@@ -173,16 +173,22 @@ config CRYPTO_USER
          Userspace configuration for cryptographic instantiations such as
          cbc(aes).
 
-config CRYPTO_MANAGER_DISABLE_TESTS
-       bool "Disable run-time self tests"
-       default y
+config CRYPTO_SELFTESTS
+       bool "Enable cryptographic self-tests"
+       depends on DEBUG_KERNEL
        help
-         Disable run-time self tests that normally take place at
-         algorithm registration.
+         Enable the cryptographic self-tests.
+
+         The cryptographic self-tests run at boot time, or at algorithm
+         registration time if algorithms are dynamically loaded later.
+
+         This is primarily intended for developer use.  It should not be
+         enabled in production kernels, unless you are trying to use these
+         tests to fulfill a FIPS testing requirement.
 
 config CRYPTO_MANAGER_EXTRA_TESTS
        bool "Enable extra run-time crypto self tests"
-       depends on DEBUG_KERNEL && !CRYPTO_MANAGER_DISABLE_TESTS && CRYPTO_MANAGER
+       depends on DEBUG_KERNEL && CRYPTO_SELFTESTS && CRYPTO_MANAGER
        help
          Enable extra run-time self tests of registered crypto algorithms,
          including randomized fuzz tests.
index 532d3efc3c7d00c87dd7fbedf535bfe9da8d6743..9030a30c89e84aa02a4105d30aa87330c38edcac 100644 (file)
@@ -275,7 +275,7 @@ static struct crypto_larval *crypto_alloc_test_larval(struct crypto_alg *alg)
        struct crypto_larval *larval;
 
        if (!IS_ENABLED(CONFIG_CRYPTO_MANAGER) ||
-           IS_ENABLED(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS) ||
+           !IS_ENABLED(CONFIG_CRYPTO_SELFTESTS) ||
            (alg->cra_flags & CRYPTO_ALG_INTERNAL))
                return NULL; /* No self-test needed */
 
@@ -1059,7 +1059,7 @@ static void __init crypto_start_tests(void)
        if (!IS_BUILTIN(CONFIG_CRYPTO_ALGAPI))
                return;
 
-       if (IS_ENABLED(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS))
+       if (!IS_ENABLED(CONFIG_CRYPTO_SELFTESTS))
                return;
 
        set_crypto_boot_test_finished();
index ef5c73780fc78c15d45c90668e0c0d3a7b180b47..846f586889ee4478649f829d2c2ce268d7640f3a 100644 (file)
@@ -189,7 +189,7 @@ static int cryptomgr_schedule_test(struct crypto_alg *alg)
        struct task_struct *thread;
        struct crypto_test_param *param;
 
-       if (IS_ENABLED(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS))
+       if (!IS_ENABLED(CONFIG_CRYPTO_SELFTESTS))
                return NOTIFY_DONE;
 
        if (!try_module_get(THIS_MODULE))
index 5cd5ec105bb142b00560dc2bb8b0c8eec5d45c2b..133d9b62692272c4d93a247b12eff5978eb14d68 100644 (file)
@@ -31,8 +31,7 @@ EXPORT_SYMBOL_GPL(crypto_alg_sem);
 BLOCKING_NOTIFIER_HEAD(crypto_chain);
 EXPORT_SYMBOL_GPL(crypto_chain);
 
-#if IS_BUILTIN(CONFIG_CRYPTO_ALGAPI) && \
-    !IS_ENABLED(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS)
+#if IS_BUILTIN(CONFIG_CRYPTO_ALGAPI) && IS_ENABLED(CONFIG_CRYPTO_SELFTESTS)
 DEFINE_STATIC_KEY_FALSE(__crypto_boot_test_finished);
 #endif
 
index 2434c5c425456c72de9195497d57ec9c1ce0d813..f24c2a8d4df99a1f410f3f34f19f1ee0f1e69edd 100644 (file)
@@ -543,7 +543,7 @@ static int __init crypto_hkdf_module_init(void)
 {
        int ret = 0, i;
 
-       if (IS_ENABLED(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS))
+       if (!IS_ENABLED(CONFIG_CRYPTO_SELFTESTS))
                return 0;
 
        for (i = 0; i < ARRAY_SIZE(hkdf_sha256_tv); i++) {
index 2ed79bf208ca289ffc82b08b91f31e80d90213c6..b9afd68767c199a5601dbfaec63703a737b8b727 100644 (file)
@@ -67,8 +67,7 @@ extern struct blocking_notifier_head crypto_chain;
 
 int alg_test(const char *driver, const char *alg, u32 type, u32 mask);
 
-#if !IS_BUILTIN(CONFIG_CRYPTO_ALGAPI) || \
-    IS_ENABLED(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS)
+#if !IS_BUILTIN(CONFIG_CRYPTO_ALGAPI) || !IS_ENABLED(CONFIG_CRYPTO_SELFTESTS)
 static inline bool crypto_boot_test_finished(void)
 {
        return true;
@@ -87,7 +86,7 @@ static inline void set_crypto_boot_test_finished(void)
        static_branch_enable(&__crypto_boot_test_finished);
 }
 #endif /* !IS_BUILTIN(CONFIG_CRYPTO_ALGAPI) ||
-       * IS_ENABLED(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS)
+       * !IS_ENABLED(CONFIG_CRYPTO_SELFTESTS)
        */
 
 #ifdef CONFIG_PROC_FS
index c3f9938e1ad27fd838508ca5d3e93ab136e350dd..b7a6bf9da773a77d494605bc6caa4a24c59ccbdd 100644 (file)
@@ -127,7 +127,7 @@ static int __init crypto_kdf108_init(void)
 {
        int ret;
 
-       if (IS_ENABLED(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS))
+       if (!IS_ENABLED(CONFIG_CRYPTO_SELFTESTS))
                return 0;
 
        ret = kdf_test(&kdf_ctr_hmac_sha256_tv_template[0], "hmac(sha256)",
index 1c71616ae2cfa4171f62c113786a047e68d42e23..3a624c9b552595aaf3837e75bcba55e3433529f1 100644 (file)
@@ -55,7 +55,7 @@ module_param(fuzz_iterations, uint, 0644);
 MODULE_PARM_DESC(fuzz_iterations, "number of fuzz test iterations");
 #endif
 
-#ifdef CONFIG_CRYPTO_MANAGER_DISABLE_TESTS
+#ifndef CONFIG_CRYPTO_SELFTESTS
 
 /* a perfect nop */
 int alg_test(const char *driver, const char *alg, u32 type, u32 mask)
@@ -321,10 +321,10 @@ struct testvec_config {
 
 /*
  * The following are the lists of testvec_configs to test for each algorithm
- * type when the basic crypto self-tests are enabled, i.e. when
- * CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is unset.  They aim to provide good test
- * coverage, while keeping the test time much shorter than the full fuzz tests
- * so that the basic tests can be enabled in a wider range of circumstances.
+ * type when the basic crypto self-tests are enabled.  They aim to provide good
+ * test coverage, while keeping the test time much shorter than the full fuzz
+ * tests so that the basic tests can be enabled in a wider range of
+ * circumstances.
  */
 
 /* Configs for skciphers and aeads */
@@ -5899,6 +5899,6 @@ non_fips_alg:
        return alg_fips_disabled(driver, alg);
 }
 
-#endif /* CONFIG_CRYPTO_MANAGER_DISABLE_TESTS */
+#endif /* CONFIG_CRYPTO_SELFTESTS */
 
 EXPORT_SYMBOL_GPL(alg_test);
index ff4aa22e5ccc74d3a4c56339a8502eba2677afac..599e61375938b30a5b631b34e6ccb86af5da3120 100644 (file)
@@ -25,9 +25,11 @@ obj-$(CONFIG_CRYPTO_LIB_GF128MUL)            += gf128mul.o
 obj-y                                          += libblake2s.o
 libblake2s-y                                   := blake2s.o
 libblake2s-$(CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC)        += blake2s-generic.o
+libblake2s-$(CONFIG_CRYPTO_SELFTESTS)          += blake2s-selftest.o
 
 obj-$(CONFIG_CRYPTO_LIB_CHACHA20POLY1305)      += libchacha20poly1305.o
 libchacha20poly1305-y                          += chacha20poly1305.o
+libchacha20poly1305-$(CONFIG_CRYPTO_SELFTESTS) += chacha20poly1305-selftest.o
 
 obj-$(CONFIG_CRYPTO_LIB_CURVE25519_GENERIC)    += libcurve25519-generic.o
 libcurve25519-generic-y                                := curve25519-fiat32.o
@@ -36,6 +38,7 @@ libcurve25519-generic-y                               += curve25519-generic.o
 
 obj-$(CONFIG_CRYPTO_LIB_CURVE25519)            += libcurve25519.o
 libcurve25519-y                                        += curve25519.o
+libcurve25519-$(CONFIG_CRYPTO_SELFTESTS)       += curve25519-selftest.o
 
 obj-$(CONFIG_CRYPTO_LIB_DES)                   += libdes.o
 libdes-y                                       := des.o
@@ -57,12 +60,6 @@ libsha256-y                                  := sha256.o
 obj-$(CONFIG_CRYPTO_LIB_SHA256_GENERIC)                += libsha256-generic.o
 libsha256-generic-y                            := sha256-generic.o
 
-ifneq ($(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS),y)
-libblake2s-y                                   += blake2s-selftest.o
-libchacha20poly1305-y                          += chacha20poly1305-selftest.o
-libcurve25519-y                                        += curve25519-selftest.o
-endif
-
 obj-$(CONFIG_MPILIB) += mpi/
 
 obj-$(CONFIG_CRYPTO_MANAGER_EXTRA_TESTS)       += simd.o
index 749dc1258a44b7afd7e1becb8fa667a00e275e69..437613265e14ff6ceaab37c0c87505cb4720220d 100644 (file)
@@ -99,7 +99,7 @@ MODULE_DESCRIPTION("Generic AES-CFB library");
 MODULE_AUTHOR("Ard Biesheuvel <ardb@kernel.org>");
 MODULE_LICENSE("GPL");
 
-#ifndef CONFIG_CRYPTO_MANAGER_DISABLE_TESTS
+#ifdef CONFIG_CRYPTO_SELFTESTS
 
 /*
  * Test code below. Vectors taken from crypto/testmgr.h
index 902e49410aaf75c9b8f1486bc1c651a556449e5b..277824d6b4af7179568a4ae6c73c6397cf9fea8d 100644 (file)
@@ -199,7 +199,7 @@ MODULE_DESCRIPTION("Generic AES-GCM library");
 MODULE_AUTHOR("Ard Biesheuvel <ardb@kernel.org>");
 MODULE_LICENSE("GPL");
 
-#ifndef CONFIG_CRYPTO_MANAGER_DISABLE_TESTS
+#ifdef CONFIG_CRYPTO_SELFTESTS
 
 /*
  * Test code below. Vectors taken from crypto/testmgr.h
index 71a316552cc5f590dde8d7c8cb51829a425ae6fa..b0f9a678300b34527654885cd91a28a69111e9e0 100644 (file)
@@ -60,7 +60,7 @@ EXPORT_SYMBOL(blake2s_final);
 
 static int __init blake2s_mod_init(void)
 {
-       if (!IS_ENABLED(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS) &&
+       if (IS_ENABLED(CONFIG_CRYPTO_SELFTESTS) &&
            WARN_ON(!blake2s_selftest()))
                return -ENODEV;
        return 0;
index fbd3690e2531654aebe92f2de7dd372d600aa990..e29eed49a5a14e8d7e01c1d697587457b59b6bd9 100644 (file)
@@ -358,7 +358,7 @@ EXPORT_SYMBOL(chacha20poly1305_decrypt_sg_inplace);
 
 static int __init chacha20poly1305_init(void)
 {
-       if (!IS_ENABLED(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS) &&
+       if (IS_ENABLED(CONFIG_CRYPTO_SELFTESTS) &&
            WARN_ON(!chacha20poly1305_selftest()))
                return -ENODEV;
        return 0;
index 064b352c6907b168c77f656399af65586965332d..6850b76a80c9e3a1e7e56facfe572e4e79318ba7 100644 (file)
@@ -15,7 +15,7 @@
 
 static int __init curve25519_init(void)
 {
-       if (!IS_ENABLED(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS) &&
+       if (IS_ENABLED(CONFIG_CRYPTO_SELFTESTS) &&
            WARN_ON(!curve25519_selftest()))
                return -ENODEV;
        return 0;