From 15fcf7095fa108cd53f7ab36c2822c69bb63d4e7 Mon Sep 17 00:00:00 2001 From: Daniel Pouzzner Date: Tue, 16 Dec 2025 16:58:08 -0600 Subject: [PATCH] linuxkm/lkcapi_{dh,ecdh,ecdsa,rsa,aes}_glue.c: when LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG, don't "#error Config conflict" if explicit LINUXKM_LKCAPI_DONT_REGISTER_foo is defined for the missing algorithm. --- linuxkm/lkcapi_aes_glue.c | 17 +++++++++++------ linuxkm/lkcapi_dh_glue.c | 8 ++++++-- linuxkm/lkcapi_ecdh_glue.c | 4 +++- linuxkm/lkcapi_ecdsa_glue.c | 4 +++- linuxkm/lkcapi_rsa_glue.c | 5 +++-- 5 files changed, 26 insertions(+), 12 deletions(-) diff --git a/linuxkm/lkcapi_aes_glue.c b/linuxkm/lkcapi_aes_glue.c index 7cf99b07b..44e107cdc 100644 --- a/linuxkm/lkcapi_aes_glue.c +++ b/linuxkm/lkcapi_aes_glue.c @@ -121,7 +121,8 @@ #define LINUXKM_LKCAPI_REGISTER_AESCBC #endif #else - #if defined(LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG) && defined(CONFIG_CRYPTO_CBC) + #if defined(LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG) && defined(CONFIG_CRYPTO_CBC) && \ + !defined(LINUXKM_LKCAPI_DONT_REGISTER_AESCBC) #error Config conflict: target kernel has CONFIG_CRYPTO_CBC, but module is missing HAVE_AES_CBC. #endif #undef LINUXKM_LKCAPI_REGISTER_AESCBC @@ -151,7 +152,8 @@ #define LINUXKM_LKCAPI_REGISTER_AESGCM_RFC4106 #endif #else - #if defined(LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG) && defined(CONFIG_CRYPTO_GCM) + #if defined(LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG) && defined(CONFIG_CRYPTO_GCM) && \ + !defined(LINUXKM_LKCAPI_DONT_REGISTER_AESGCM) #error Config conflict: target kernel has CONFIG_CRYPTO_GCM, but module is missing HAVE_AESGCM. #endif #undef LINUXKM_LKCAPI_REGISTER_AESGCM @@ -166,8 +168,9 @@ #define LINUXKM_LKCAPI_REGISTER_AESXTS #endif #else - #if defined(LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG) && defined(CONFIG_CRYPTO_XTS) - #error Config conflict: target kernel has CONFIG_CRYPTO_GCM, but module is missing WOLFSSL_AES_XTS. + #if defined(LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG) && defined(CONFIG_CRYPTO_XTS) && \ + !defined(LINUXKM_LKCAPI_DONT_REGISTER_AESXTS) + #error Config conflict: target kernel has CONFIG_CRYPTO_XTS, but module is missing WOLFSSL_AES_XTS. #endif #undef LINUXKM_LKCAPI_REGISTER_AESXTS #endif @@ -180,7 +183,8 @@ #define LINUXKM_LKCAPI_REGISTER_AESCTR #endif #else - #if defined(LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG) && defined(CONFIG_CRYPTO_CTR) + #if defined(LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG) && defined(CONFIG_CRYPTO_CTR) && \ + !defined(LINUXKM_LKCAPI_DONT_REGISTER_AESCTR) #error Config conflict: target kernel has CONFIG_CRYPTO_CTR, but module is missing WOLFSSL_AES_COUNTER. #endif #undef LINUXKM_LKCAPI_REGISTER_AESCTR @@ -204,7 +208,8 @@ #define LINUXKM_LKCAPI_REGISTER_AESECB #endif #else - #if defined(LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG) && defined(CONFIG_CRYPTO_ECB) + #if defined(LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG) && defined(CONFIG_CRYPTO_ECB) && \ + !defined(LINUXKM_LKCAPI_DONT_REGISTER_AESECB) #error Config conflict: target kernel has CONFIG_CRYPTO_ECB, but module is missing HAVE_AES_ECB. #endif #undef LINUXKM_LKCAPI_REGISTER_AESECB diff --git a/linuxkm/lkcapi_dh_glue.c b/linuxkm/lkcapi_dh_glue.c index 8b3ff0ce5..10cd9cf5e 100644 --- a/linuxkm/lkcapi_dh_glue.c +++ b/linuxkm/lkcapi_dh_glue.c @@ -58,7 +58,10 @@ #undef LINUXKM_LKCAPI_REGISTER_DH #endif -#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0)) && \ + !(defined(RHEL_MAJOR) && \ + ((RHEL_MAJOR > 9) || ((RHEL_MAJOR == 9) && (RHEL_MINOR >= 5)))) + /* Support for FFDHE was added in kernel 5.18, and generic DH support * pre-5.18 used a different binary format for the secret (an additional * slot for q). @@ -73,7 +76,8 @@ #if defined(LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG) && \ (defined(CONFIG_CRYPTO_DH) || defined(CONFIG_CRYPTO_DH_RFC7919_GROUPS)) && \ - !defined(LINUXKM_LKCAPI_REGISTER_DH) + !defined(LINUXKM_LKCAPI_REGISTER_DH) && \ + !defined(LINUXKM_LKCAPI_DONT_REGISTER_DH) #error Config conflict: target kernel has CONFIG_CRYPTO_DH and/or \ _DH_RFC7919_GROUPS, but module is missing LINUXKM_LKCAPI_REGISTER_DH. #endif diff --git a/linuxkm/lkcapi_ecdh_glue.c b/linuxkm/lkcapi_ecdh_glue.c index 86231183d..e4a5d717b 100644 --- a/linuxkm/lkcapi_ecdh_glue.c +++ b/linuxkm/lkcapi_ecdh_glue.c @@ -43,7 +43,8 @@ /* currently incompatible with kernel 5.12 or earlier. */ #undef LINUXKM_LKCAPI_REGISTER_ECDH - #if defined(LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG) && defined(CONFIG_CRYPTO_ECDH) + #if defined(LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG) && defined(CONFIG_CRYPTO_ECDH) && \ + !defined(LINUXKM_LKCAPI_DONT_REGISTER_ECDH) #error Config conflict: missing implementation forces off LINUXKM_LKCAPI_REGISTER_ECDH. #endif #endif @@ -51,6 +52,7 @@ #if defined(LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG) && \ defined(CONFIG_CRYPTO_ECDH) && \ + !defined(LINUXKM_LKCAPI_DONT_REGISTER_ECDH) && \ !defined(LINUXKM_LKCAPI_REGISTER_ECDH) #error Config conflict: target kernel has CONFIG_CRYPTO_ECDH, but module is missing LINUXKM_LKCAPI_REGISTER_ECDH. #endif diff --git a/linuxkm/lkcapi_ecdsa_glue.c b/linuxkm/lkcapi_ecdsa_glue.c index 92d38dfd2..63d2ec9d9 100644 --- a/linuxkm/lkcapi_ecdsa_glue.c +++ b/linuxkm/lkcapi_ecdsa_glue.c @@ -64,13 +64,15 @@ #undef LINUXKM_LKCAPI_REGISTER_ECDSA #endif /* LINUXKM_LKCAPI_REGISTER_ECDSA */ - #if defined(LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG) && defined(CONFIG_CRYPTO_ECDSA) + #if defined(LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG) && defined(CONFIG_CRYPTO_ECDSA) && \ + !defined(LINUXKM_LKCAPI_DONT_REGISTER_ECDSA) #error Config conflict: missing implementation forces off LINUXKM_LKCAPI_REGISTER_ECDSA. #endif #endif #if defined(LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG) && \ defined(CONFIG_CRYPTO_ECDSA) && \ + !defined(LINUXKM_LKCAPI_DONT_REGISTER_ECDSA) && \ !defined(LINUXKM_LKCAPI_REGISTER_ECDSA) #error Config conflict: target kernel has CONFIG_CRYPTO_ECDSA, but module is missing LINUXKM_LKCAPI_REGISTER_ECDSA. #endif diff --git a/linuxkm/lkcapi_rsa_glue.c b/linuxkm/lkcapi_rsa_glue.c index 0902af41f..97862409a 100644 --- a/linuxkm/lkcapi_rsa_glue.c +++ b/linuxkm/lkcapi_rsa_glue.c @@ -63,7 +63,8 @@ #if defined(LINUXKM_LKCAPI_REGISTER_ALL_KCONFIG) && \ defined(CONFIG_CRYPTO_RSA) && \ - !defined(LINUXKM_LKCAPI_REGISTER_RSA) + !defined(LINUXKM_LKCAPI_REGISTER_RSA) && \ + !defined(LINUXKM_LKCAPI_DONT_REGISTER_RSA) #error Config conflict: target kernel has CONFIG_CRYPTO_RSA, but module is missing LINUXKM_LKCAPI_REGISTER_RSA. #endif @@ -71,7 +72,7 @@ #if defined(WOLFSSL_RSA_VERIFY_ONLY) || \ defined(WOLFSSL_RSA_PUBLIC_ONLY) - #error LINUXKM_LKCAPI_REGISTER_RSA and RSA_VERIFY_ONLY not supported + #error LINUXKM_LKCAPI_REGISTER_RSA with RSA_VERIFY_ONLY/WOLFSSL_RSA_PUBLIC_ONLY not supported #endif /* WOLFSSL_RSA_VERIFY_ONLY || WOLFSSL_RSA_PUBLIC_ONLY */ #ifdef WC_RSA_NO_PADDING