e52367a
From 2c110cf5551a3869514e697d8dc06682b62ca57d Mon Sep 17 00:00:00 2001
e52367a
From: Dmitry Belyavskiy <dbelyavs@redhat.com>
e52367a
Date: Mon, 21 Aug 2023 11:59:02 +0200
e52367a
Subject: [PATCH 16/48] 0032-Force-fips.patch
1eb7adc
1eb7adc
Patch-name: 0032-Force-fips.patch
1eb7adc
Patch-id: 32
1eb7adc
Patch-status: |
1eb7adc
    # We load FIPS provider and set FIPS properties implicitly
1eb7adc
---
e52367a
 crypto/provider_conf.c | 28 +++++++++++++++++++++++++++-
e52367a
 1 file changed, 27 insertions(+), 1 deletion(-)
1eb7adc
1eb7adc
diff --git a/crypto/provider_conf.c b/crypto/provider_conf.c
e52367a
index 058fb58837..5274265a70 100644
1eb7adc
--- a/crypto/provider_conf.c
1eb7adc
+++ b/crypto/provider_conf.c
e52367a
@@ -10,6 +10,8 @@
106fe89
 #include <string.h>
106fe89
 #include <openssl/trace.h>
106fe89
 #include <openssl/err.h>
106fe89
+#include <openssl/evp.h>
e52367a
+#include <unistd.h>
106fe89
 #include <openssl/conf.h>
106fe89
 #include <openssl/safestack.h>
106fe89
 #include <openssl/provider.h>
e52367a
@@ -169,7 +171,7 @@ static int provider_conf_activate(OSSL_LIB_CTX *libctx, const char *name,
9409bc7
         if (path != NULL)
9409bc7
             ossl_provider_set_module_path(prov, path);
080143c
 
9409bc7
-        ok = provider_conf_params(prov, NULL, NULL, value, cnf);
9409bc7
+        ok = cnf ? provider_conf_params(prov, NULL, NULL, value, cnf) : 1;
080143c
 
f4c397c
         if (ok == 1) {
9409bc7
             if (!ossl_provider_activate(prov, 1, 0)) {
e52367a
@@ -309,6 +311,30 @@ static int provider_conf_init(CONF_IMODULE *md, const CONF *cnf)
080143c
             return 0;
080143c
     }
080143c
 
080143c
+    if (ossl_get_kernel_fips_flag() != 0) { /* XXX from provider_conf_load */
080143c
+        OSSL_LIB_CTX *libctx = NCONF_get0_libctx((CONF *)cnf);
e52367a
+#  define FIPS_LOCAL_CONF           OPENSSLDIR "/fips_local.cnf"
e52367a
+
e52367a
+        if (access(FIPS_LOCAL_CONF, R_OK) == 0) {
e52367a
+            CONF *fips_conf = NCONF_new_ex(libctx, NCONF_default());
e52367a
+            if (NCONF_load(fips_conf, FIPS_LOCAL_CONF, NULL) <= 0)
e52367a
+                return 0;
e52367a
+
e52367a
+            if (provider_conf_load(libctx, "fips", "fips_sect", fips_conf) != 1) {
e52367a
+                NCONF_free(fips_conf);
e52367a
+                return 0;
e52367a
+            }
e52367a
+            NCONF_free(fips_conf);
e52367a
+        } else {
e52367a
+            if (provider_conf_activate(libctx, "fips", NULL, NULL, 0, NULL) != 1)
e52367a
+                return 0;
e52367a
+        }
080143c
+        if (provider_conf_activate(libctx, "base", NULL, NULL, 0, NULL) != 1)
080143c
+            return 0;
080143c
+        if (EVP_default_properties_enable_fips(libctx, 1) != 1)
080143c
+            return 0;
080143c
+    }
080143c
+
080143c
     return 1;
080143c
 }
080143c
 
1eb7adc
-- 
1eb7adc
2.41.0
1eb7adc