certs: Break circular dependency when selftest is modular
authorHerbert Xu <herbert@gondor.apana.org.au>
Mon, 16 Oct 2023 05:21:44 +0000 (13:21 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 27 Oct 2023 10:04:24 +0000 (18:04 +0800)
The modular build fails because the self-test code depends on pkcs7
which in turn depends on x509 which contains the self-test.

Split the self-test out into its own module to break the cycle.

Fixes: 3cde3174eb91 ("certs: Add FIPS selftests")
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/asymmetric_keys/Kconfig
crypto/asymmetric_keys/Makefile
crypto/asymmetric_keys/selftest.c
crypto/asymmetric_keys/x509_parser.h
crypto/asymmetric_keys/x509_public_key.c

index 1ef3b46d6f6e5ca2b2da611bf35dd9bb29b2c1cf..59ec726b7c770e1064b5e5cd4e58b79880d21cfe 100644 (file)
@@ -76,7 +76,7 @@ config SIGNED_PE_FILE_VERIFICATION
          signed PE binary.
 
 config FIPS_SIGNATURE_SELFTEST
-       bool "Run FIPS selftests on the X.509+PKCS7 signature verification"
+       tristate "Run FIPS selftests on the X.509+PKCS7 signature verification"
        help
          This option causes some selftests to be run on the signature
          verification code, using some built in data.  This is required
@@ -84,5 +84,6 @@ config FIPS_SIGNATURE_SELFTEST
        depends on KEYS
        depends on ASYMMETRIC_KEY_TYPE
        depends on PKCS7_MESSAGE_PARSER=X509_CERTIFICATE_PARSER
+       depends on X509_CERTIFICATE_PARSER
 
 endif # ASYMMETRIC_KEY_TYPE
index 0d1fa1b692c6b23ae7508802b68fcf52d6dd9cd7..1a273d6df3ebf4e41da89b619d9fd870bddda342 100644 (file)
@@ -22,7 +22,8 @@ x509_key_parser-y := \
        x509_cert_parser.o \
        x509_loader.o \
        x509_public_key.o
-x509_key_parser-$(CONFIG_FIPS_SIGNATURE_SELFTEST) += selftest.o
+obj-$(CONFIG_FIPS_SIGNATURE_SELFTEST) += x509_selftest.o
+x509_selftest-y += selftest.o
 
 $(obj)/x509_cert_parser.o: \
        $(obj)/x509.asn1.h \
index fa0bf7f2428495c14146bddafd838d1144aa1999..c50da7ef90ae999e12e4ff38c1dddcbc9d2482e4 100644 (file)
@@ -4,10 +4,11 @@
  * Written by David Howells (dhowells@redhat.com)
  */
 
-#include <linux/kernel.h>
+#include <crypto/pkcs7.h>
 #include <linux/cred.h>
+#include <linux/kernel.h>
 #include <linux/key.h>
-#include <crypto/pkcs7.h>
+#include <linux/module.h>
 #include "x509_parser.h"
 
 struct certs_test {
@@ -175,7 +176,7 @@ static const struct certs_test certs_tests[] __initconst = {
        TEST(certs_selftest_1_data, certs_selftest_1_pkcs7),
 };
 
-int __init fips_signature_selftest(void)
+static int __init fips_signature_selftest(void)
 {
        struct key *keyring;
        int ret, i;
@@ -222,3 +223,9 @@ int __init fips_signature_selftest(void)
        key_put(keyring);
        return 0;
 }
+
+late_initcall(fips_signature_selftest);
+
+MODULE_DESCRIPTION("X.509 self tests");
+MODULE_AUTHOR("Red Hat, Inc.");
+MODULE_LICENSE("GPL");
index a299c9c56f409ef4600f5b1c8d6270f0084b16bc..97a886cbe01c3de4271eddbe6e28cf9ff7432389 100644 (file)
@@ -40,15 +40,6 @@ struct x509_certificate {
        bool            blacklisted;
 };
 
-/*
- * selftest.c
- */
-#ifdef CONFIG_FIPS_SIGNATURE_SELFTEST
-extern int __init fips_signature_selftest(void);
-#else
-static inline int fips_signature_selftest(void) { return 0; }
-#endif
-
 /*
  * x509_cert_parser.c
  */
index 7c71db3ac23d487b36bc4b2c115d5dae4d15be6e..6a4f00be22fc10b55b500fd0d9e1b4ffae50fc48 100644 (file)
@@ -262,15 +262,9 @@ static struct asymmetric_key_parser x509_key_parser = {
 /*
  * Module stuff
  */
-extern int __init certs_selftest(void);
 static int __init x509_key_init(void)
 {
-       int ret;
-
-       ret = register_asymmetric_key_parser(&x509_key_parser);
-       if (ret < 0)
-               return ret;
-       return fips_signature_selftest();
+       return register_asymmetric_key_parser(&x509_key_parser);
 }
 
 static void __exit x509_key_exit(void)