d7ce942
diff -up libgcrypt-1.8.5/src/fips.c.fips-module libgcrypt-1.8.5/src/fips.c
d7ce942
--- libgcrypt-1.8.5/src/fips.c.fips-module	2020-04-20 19:07:45.924919645 +0200
d7ce942
+++ libgcrypt-1.8.5/src/fips.c	2020-04-20 19:10:33.690722470 +0200
d7ce942
@@ -35,10 +35,6 @@
d7ce942
 #include "hmac256.h"
d7ce942
 
d7ce942
 
d7ce942
-/* The name of the file used to force libgcrypt into fips mode. */
d7ce942
-#define FIPS_FORCE_FILE "/etc/gcrypt/fips_enabled"
d7ce942
-
d7ce942
-
d7ce942
 /* The states of the finite state machine used in fips mode.  */
d7ce942
 enum module_states
d7ce942
   {
d7ce942
@@ -122,54 +118,6 @@ _gcry_initialize_fips_mode (int force)
d7ce942
       goto leave;
d7ce942
     }
d7ce942
 
d7ce942
-  /* For testing the system it is useful to override the system
d7ce942
-     provided detection of the FIPS mode and force FIPS mode using a
d7ce942
-     file.  The filename is hardwired so that there won't be any
d7ce942
-     confusion on whether /etc/gcrypt/ or /usr/local/etc/gcrypt/ is
d7ce942
-     actually used.  The file itself may be empty.  */
d7ce942
-  if ( !access (FIPS_FORCE_FILE, F_OK) )
d7ce942
-    {
d7ce942
-      gcry_assert (!no_fips_mode_required);
d7ce942
-      goto leave;
d7ce942
-    }
d7ce942
-
d7ce942
-  /* Checking based on /proc file properties.  */
d7ce942
-  {
d7ce942
-    static const char procfname[] = "/proc/sys/crypto/fips_enabled";
d7ce942
-    FILE *fp;
d7ce942
-    int saved_errno;
d7ce942
-
d7ce942
-    fp = fopen (procfname, "r");
d7ce942
-    if (fp)
d7ce942
-      {
d7ce942
-        char line[256];
d7ce942
-
d7ce942
-        if (fgets (line, sizeof line, fp) && atoi (line))
d7ce942
-          {
d7ce942
-            /* System is in fips mode.  */
d7ce942
-            fclose (fp);
d7ce942
-            gcry_assert (!no_fips_mode_required);
d7ce942
-            goto leave;
d7ce942
-          }
d7ce942
-        fclose (fp);
d7ce942
-      }
d7ce942
-    else if ((saved_errno = errno) != ENOENT
d7ce942
-             && saved_errno != EACCES
d7ce942
-             && !access ("/proc/version", F_OK) )
d7ce942
-      {
d7ce942
-        /* Problem reading the fips file despite that we have the proc
d7ce942
-           file system.  We better stop right away. */
d7ce942
-        log_info ("FATAL: error reading `%s' in libgcrypt: %s\n",
d7ce942
-                  procfname, strerror (saved_errno));
d7ce942
-#ifdef HAVE_SYSLOG
d7ce942
-        syslog (LOG_USER|LOG_ERR, "Libgcrypt error: "
d7ce942
-                "reading `%s' failed: %s - abort",
d7ce942
-                procfname, strerror (saved_errno));
d7ce942
-#endif /*HAVE_SYSLOG*/
d7ce942
-        abort ();
d7ce942
-      }
d7ce942
-  }
d7ce942
-
d7ce942
   /* Fips not not requested, set flag.  */
d7ce942
   no_fips_mode_required = 1;
d7ce942
 
d7ce942
diff -up libgcrypt-1.8.5/src/g10lib.h.fips-module libgcrypt-1.8.5/src/g10lib.h
d7ce942
--- libgcrypt-1.8.5/src/g10lib.h.fips-module	2020-04-20 19:07:45.918919759 +0200
d7ce942
+++ libgcrypt-1.8.5/src/g10lib.h	2020-04-20 19:11:05.003125740 +0200
d7ce942
@@ -422,6 +422,9 @@ gpg_err_code_t _gcry_sexp_vextract_param
d7ce942
 
d7ce942
 /*-- fips.c --*/
d7ce942
 
d7ce942
+/* The name of the file used to force libgcrypt into fips mode. */
d7ce942
+#define FIPS_FORCE_FILE "/etc/gcrypt/fips_enabled"
d7ce942
+
d7ce942
 void _gcry_initialize_fips_mode (int force);
d7ce942
 
d7ce942
 int _gcry_fips_mode (void);
d7ce942
diff -up libgcrypt-1.8.5/src/global.c.fips-module libgcrypt-1.8.5/src/global.c
d7ce942
--- libgcrypt-1.8.5/src/global.c.fips-module	2020-04-20 19:07:45.919919741 +0200
d7ce942
+++ libgcrypt-1.8.5/src/global.c	2020-04-20 19:07:45.950919149 +0200
d7ce942
@@ -160,6 +160,53 @@ void __attribute__ ((constructor)) _gcry
d7ce942
   rv = access (FIPS_MODULE_PATH, F_OK);
d7ce942
   if (rv < 0 && errno != ENOENT)
d7ce942
     rv = 0;
d7ce942
+ 
d7ce942
+  /* For testing the system it is useful to override the system
d7ce942
+     provided detection of the FIPS mode and force FIPS mode using a
d7ce942
+     file.  The filename is hardwired so that there won't be any
d7ce942
+     confusion on whether /etc/gcrypt/ or /usr/local/etc/gcrypt/ is
d7ce942
+     actually used.  The file itself may be empty.  */
d7ce942
+  if ( !access (FIPS_FORCE_FILE, F_OK) )
d7ce942
+    {
d7ce942
+      rv = 0;
d7ce942
+      force_fips_mode = 1;
d7ce942
+    }
d7ce942
+
d7ce942
+  /* Checking based on /proc file properties.  */
d7ce942
+  {
d7ce942
+    static const char procfname[] = "/proc/sys/crypto/fips_enabled";
d7ce942
+    FILE *fp;
d7ce942
+    int saved_errno;
d7ce942
+
d7ce942
+    fp = fopen (procfname, "r");
d7ce942
+    if (fp)
d7ce942
+      {
d7ce942
+        char line[256];
d7ce942
+
d7ce942
+        if (fgets (line, sizeof line, fp) && atoi (line))
d7ce942
+          {
d7ce942
+            /* System is in fips mode.  */
d7ce942
+            rv = 0;
d7ce942
+            force_fips_mode = 1;
d7ce942
+          }
d7ce942
+        fclose (fp);
d7ce942
+      }
d7ce942
+    else if ((saved_errno = errno) != ENOENT
d7ce942
+             && saved_errno != EACCES
d7ce942
+             && !access ("/proc/version", F_OK) )
d7ce942
+      {
d7ce942
+        /* Problem reading the fips file despite that we have the proc
d7ce942
+           file system.  We better stop right away. */
d7ce942
+        log_info ("FATAL: error reading `%s' in libgcrypt: %s\n",
d7ce942
+                  procfname, strerror (saved_errno));
d7ce942
+#ifdef HAVE_SYSLOG
d7ce942
+        syslog (LOG_USER|LOG_ERR, "Libgcrypt error: "
d7ce942
+                "reading `%s' failed: %s - abort",
d7ce942
+                procfname, strerror (saved_errno));
d7ce942
+#endif /*HAVE_SYSLOG*/
d7ce942
+        abort ();
d7ce942
+      }
d7ce942
+  }
d7ce942
 
d7ce942
   if (!rv)
d7ce942
     {