FIPS selftest is run directly from the constructor
FIPS module is implicit with kernel FIPS flag
This commit is contained in:
parent
4dfc42c2d2
commit
d7ce942d74
@ -1,196 +1,7 @@
|
|||||||
diff -up libgcrypt-1.8.3/cipher/md.c.fips-ctor libgcrypt-1.8.3/cipher/md.c
|
|
||||||
--- libgcrypt-1.8.3/cipher/md.c.fips-ctor 2017-11-23 19:16:58.000000000 +0100
|
|
||||||
+++ libgcrypt-1.8.3/cipher/md.c 2018-07-12 13:24:54.088403006 +0200
|
|
||||||
@@ -411,11 +411,8 @@ md_enable (gcry_md_hd_t hd, int algorith
|
|
||||||
|
|
||||||
if (!err && algorithm == GCRY_MD_MD5 && fips_mode ())
|
|
||||||
{
|
|
||||||
- _gcry_inactivate_fips_mode ("MD5 used");
|
|
||||||
if (_gcry_enforced_fips_mode () )
|
|
||||||
{
|
|
||||||
- /* We should never get to here because we do not register
|
|
||||||
- MD5 in enforced fips mode. But better throw an error. */
|
|
||||||
err = GPG_ERR_DIGEST_ALGO;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
diff -up libgcrypt-1.8.3/src/fips.c.fips-ctor libgcrypt-1.8.3/src/fips.c
|
|
||||||
--- libgcrypt-1.8.3/src/fips.c.fips-ctor 2018-07-12 13:24:54.075402698 +0200
|
|
||||||
+++ libgcrypt-1.8.3/src/fips.c 2018-07-12 13:24:54.088403006 +0200
|
|
||||||
@@ -91,6 +91,31 @@ static void fips_new_state (enum module_
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
+/* Initialize the FSM lock - this function may only
|
|
||||||
+ be called once and is intended to be run from the library
|
|
||||||
+ constructor */
|
|
||||||
+void
|
|
||||||
+_gcry_initialize_fsm_lock (void)
|
|
||||||
+{
|
|
||||||
+ gpg_error_t err;
|
|
||||||
+ /* Intitialize the lock to protect the FSM. */
|
|
||||||
+ err = gpgrt_lock_init (&fsm_lock);
|
|
||||||
+ if (err)
|
|
||||||
+ {
|
|
||||||
+ /* If that fails we can't do anything but abort the
|
|
||||||
+ process. We need to use log_info so that the FSM won't
|
|
||||||
+ get involved. */
|
|
||||||
+ log_info ("FATAL: failed to create the FSM lock in libgcrypt: %s\n",
|
|
||||||
+ gpg_strerror (err));
|
|
||||||
+#ifdef HAVE_SYSLOG
|
|
||||||
+ syslog (LOG_USER|LOG_ERR, "Libgcrypt error: "
|
|
||||||
+ "creating FSM lock failed: %s - abort",
|
|
||||||
+ gpg_strerror (err));
|
|
||||||
+#endif /*HAVE_SYSLOG*/
|
|
||||||
+ abort ();
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/* Check whether the OS is in FIPS mode and record that in a module
|
|
||||||
local variable. If FORCE is passed as true, fips mode will be
|
|
||||||
enabled anyway. Note: This function is not thread-safe and should
|
|
||||||
@@ -100,7 +125,6 @@ void
|
|
||||||
_gcry_initialize_fips_mode (int force)
|
|
||||||
{
|
|
||||||
static int done;
|
|
||||||
- gpg_error_t err;
|
|
||||||
|
|
||||||
/* Make sure we are not accidentally called twice. */
|
|
||||||
if (done)
|
|
||||||
@@ -179,24 +203,6 @@ _gcry_initialize_fips_mode (int force)
|
|
||||||
/* Yes, we are in FIPS mode. */
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
- /* Intitialize the lock to protect the FSM. */
|
|
||||||
- err = gpgrt_lock_init (&fsm_lock);
|
|
||||||
- if (err)
|
|
||||||
- {
|
|
||||||
- /* If that fails we can't do anything but abort the
|
|
||||||
- process. We need to use log_info so that the FSM won't
|
|
||||||
- get involved. */
|
|
||||||
- log_info ("FATAL: failed to create the FSM lock in libgcrypt: %s\n",
|
|
||||||
- gpg_strerror (err));
|
|
||||||
-#ifdef HAVE_SYSLOG
|
|
||||||
- syslog (LOG_USER|LOG_ERR, "Libgcrypt error: "
|
|
||||||
- "creating FSM lock failed: %s - abort",
|
|
||||||
- gpg_strerror (err));
|
|
||||||
-#endif /*HAVE_SYSLOG*/
|
|
||||||
- abort ();
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
-
|
|
||||||
/* If the FIPS force files exists, is readable and has a number
|
|
||||||
!= 0 on its first line, we enable the enforced fips mode. */
|
|
||||||
fp = fopen (FIPS_FORCE_FILE, "r");
|
|
||||||
@@ -359,16 +365,20 @@ _gcry_fips_is_operational (void)
|
|
||||||
{
|
|
||||||
int result;
|
|
||||||
|
|
||||||
- if (!fips_mode ())
|
|
||||||
+ lock_fsm ();
|
|
||||||
+ if (current_state == STATE_POWERON && !fips_mode ())
|
|
||||||
+ /* If we are at this point in POWERON state it means the FIPS
|
|
||||||
+ module installation was not completed. (/etc/system-fips
|
|
||||||
+ is not present.) */
|
|
||||||
result = 1;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
- lock_fsm ();
|
|
||||||
- if (current_state == STATE_INIT)
|
|
||||||
+ if (current_state == STATE_INIT || current_state == STATE_SELFTEST)
|
|
||||||
{
|
|
||||||
- /* If we are still in the INIT state, we need to run the
|
|
||||||
- selftests so that the FSM can eventually get into
|
|
||||||
- operational state. Given that we would need a 2-phase
|
|
||||||
+ /* If we are still in the INIT (or SELFTEST) state,
|
|
||||||
+ we need to run (or finish) the selftests so
|
|
||||||
+ that the FSM can eventually get into operational
|
|
||||||
+ state. Given that we would need a 2-phase
|
|
||||||
initialization of libgcrypt, but that has traditionally
|
|
||||||
not been enforced, we use this on demand self-test
|
|
||||||
checking. Note that Proper applications would do the
|
|
||||||
@@ -384,9 +394,11 @@ _gcry_fips_is_operational (void)
|
|
||||||
lock_fsm ();
|
|
||||||
}
|
|
||||||
|
|
||||||
- result = (current_state == STATE_OPERATIONAL);
|
|
||||||
- unlock_fsm ();
|
|
||||||
+ result = (current_state == STATE_OPERATIONAL) || !fips_mode ();
|
|
||||||
+ /* We always run the selftests but ignore the result
|
|
||||||
+ in non-FIPS mode. */
|
|
||||||
}
|
|
||||||
+ unlock_fsm ();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -709,9 +721,25 @@ _gcry_fips_run_selftests (int extended)
|
|
||||||
{
|
|
||||||
enum module_states result = STATE_ERROR;
|
|
||||||
gcry_err_code_t ec = GPG_ERR_SELFTEST_FAILED;
|
|
||||||
+ int in_poweron;
|
|
||||||
|
|
||||||
- if (fips_mode ())
|
|
||||||
- fips_new_state (STATE_SELFTEST);
|
|
||||||
+ lock_fsm ();
|
|
||||||
+ in_poweron = (current_state == STATE_POWERON);
|
|
||||||
+ unlock_fsm ();
|
|
||||||
+
|
|
||||||
+ fips_new_state (STATE_SELFTEST);
|
|
||||||
+
|
|
||||||
+ /* We first check the integrity of the binary.
|
|
||||||
+ If run from the constructor we are in POWERON state,
|
|
||||||
+ we return and finish the remaining selftests before
|
|
||||||
+ real use of the library. It will be in the POWERON
|
|
||||||
+ state meanwhile. */
|
|
||||||
+ if (in_poweron)
|
|
||||||
+ if (check_binary_integrity ())
|
|
||||||
+ goto leave;
|
|
||||||
+
|
|
||||||
+ if (in_poweron)
|
|
||||||
+ return 0;
|
|
||||||
|
|
||||||
if (run_cipher_selftests (extended))
|
|
||||||
goto leave;
|
|
||||||
@@ -730,18 +758,12 @@ _gcry_fips_run_selftests (int extended)
|
|
||||||
if (run_pubkey_selftests (extended))
|
|
||||||
goto leave;
|
|
||||||
|
|
||||||
- /* Now check the integrity of the binary. We do this this after
|
|
||||||
- having checked the HMAC code. */
|
|
||||||
- if (check_binary_integrity ())
|
|
||||||
- goto leave;
|
|
||||||
-
|
|
||||||
/* All selftests passed. */
|
|
||||||
result = STATE_OPERATIONAL;
|
|
||||||
ec = 0;
|
|
||||||
|
|
||||||
leave:
|
|
||||||
- if (fips_mode ())
|
|
||||||
- fips_new_state (result);
|
|
||||||
+ fips_new_state (result);
|
|
||||||
|
|
||||||
return ec;
|
|
||||||
}
|
|
||||||
@@ -797,6 +819,7 @@ fips_new_state (enum module_states new_s
|
|
||||||
{
|
|
||||||
case STATE_POWERON:
|
|
||||||
if (new_state == STATE_INIT
|
|
||||||
+ || new_state == STATE_SELFTEST
|
|
||||||
|| new_state == STATE_ERROR
|
|
||||||
|| new_state == STATE_FATALERROR)
|
|
||||||
ok = 1;
|
|
||||||
@@ -811,6 +834,8 @@ fips_new_state (enum module_states new_s
|
|
||||||
|
|
||||||
case STATE_SELFTEST:
|
|
||||||
if (new_state == STATE_OPERATIONAL
|
|
||||||
+ || new_state == STATE_INIT
|
|
||||||
+ || new_state == STATE_SELFTEST
|
|
||||||
|| new_state == STATE_ERROR
|
|
||||||
|| new_state == STATE_FATALERROR)
|
|
||||||
ok = 1;
|
|
||||||
diff -up libgcrypt-1.8.3/src/global.c.fips-ctor libgcrypt-1.8.3/src/global.c
|
diff -up libgcrypt-1.8.3/src/global.c.fips-ctor libgcrypt-1.8.3/src/global.c
|
||||||
--- libgcrypt-1.8.3/src/global.c.fips-ctor 2017-11-23 19:25:58.000000000 +0100
|
--- libgcrypt-1.8.3/src/global.c.fips-ctor 2017-11-23 19:25:58.000000000 +0100
|
||||||
+++ libgcrypt-1.8.3/src/global.c 2018-07-17 19:15:43.933827112 +0200
|
+++ libgcrypt-1.8.3/src/global.c 2020-04-17 16:29:59.258218015 +0200
|
||||||
@@ -141,6 +141,29 @@ global_init (void)
|
@@ -141,6 +141,34 @@ global_init (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -202,25 +13,30 @@ diff -up libgcrypt-1.8.3/src/global.c.fips-ctor libgcrypt-1.8.3/src/global.c
|
|||||||
+{
|
+{
|
||||||
+ int rv;
|
+ int rv;
|
||||||
+
|
+
|
||||||
+ /* We always need the FSM lock to be functional. */
|
|
||||||
+ _gcry_initialize_fsm_lock ();
|
|
||||||
+
|
|
||||||
+ rv = access (FIPS_MODULE_PATH, F_OK);
|
+ rv = access (FIPS_MODULE_PATH, F_OK);
|
||||||
+ if (rv < 0 && errno != ENOENT)
|
+ if (rv < 0 && errno != ENOENT)
|
||||||
+ rv = 0;
|
+ rv = 0;
|
||||||
+
|
+
|
||||||
+ if (!rv)
|
+ if (!rv)
|
||||||
+ {
|
+ {
|
||||||
+ /* We run the integrity check at this point. The remaining
|
+ int no_secmem_save;
|
||||||
+ selftests are run before use of the library by application. */
|
+
|
||||||
|
+ /* it should be always 0 at this point but let's keep on the safe side */
|
||||||
|
+ no_secmem_save = no_secure_memory;
|
||||||
|
+ no_secure_memory = 1;
|
||||||
|
+ /* force selftests */
|
||||||
|
+ global_init();
|
||||||
+ _gcry_fips_run_selftests (0);
|
+ _gcry_fips_run_selftests (0);
|
||||||
|
+ if (!fips_mode())
|
||||||
|
+ _gcry_random_close_fds ();
|
||||||
|
+ no_secure_memory = no_secmem_save;
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
/* This function is called by the macro fips_is_operational and makes
|
/* This function is called by the macro fips_is_operational and makes
|
||||||
sure that the minimal initialization has been done. This is far
|
sure that the minimal initialization has been done. This is far
|
||||||
from a perfect solution and hides problems with an improper
|
from a perfect solution and hides problems with an improper
|
||||||
@@ -671,8 +694,7 @@ _gcry_vcontrol (enum gcry_ctl_cmds cmd,
|
@@ -671,8 +699,7 @@ _gcry_vcontrol (enum gcry_ctl_cmds cmd,
|
||||||
|
|
||||||
case GCRYCTL_FIPS_MODE_P:
|
case GCRYCTL_FIPS_MODE_P:
|
||||||
if (fips_mode ()
|
if (fips_mode ()
|
||||||
@ -230,7 +46,7 @@ diff -up libgcrypt-1.8.3/src/global.c.fips-ctor libgcrypt-1.8.3/src/global.c
|
|||||||
rc = GPG_ERR_GENERAL; /* Used as TRUE value */
|
rc = GPG_ERR_GENERAL; /* Used as TRUE value */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -749,9 +771,9 @@ _gcry_vcontrol (enum gcry_ctl_cmds cmd,
|
@@ -749,9 +776,9 @@ _gcry_vcontrol (enum gcry_ctl_cmds cmd,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GCRYCTL_SET_ENFORCED_FIPS_FLAG:
|
case GCRYCTL_SET_ENFORCED_FIPS_FLAG:
|
||||||
@ -242,15 +58,3 @@ diff -up libgcrypt-1.8.3/src/global.c.fips-ctor libgcrypt-1.8.3/src/global.c
|
|||||||
_gcry_set_preferred_rng_type (0);
|
_gcry_set_preferred_rng_type (0);
|
||||||
_gcry_set_enforced_fips_mode ();
|
_gcry_set_enforced_fips_mode ();
|
||||||
}
|
}
|
||||||
diff -up libgcrypt-1.8.3/src/g10lib.h.fips-ctor libgcrypt-1.8.3/src/g10lib.h
|
|
||||||
--- libgcrypt-1.8.3/src/g10lib.h.fips-ctor 2017-11-23 19:16:58.000000000 +0100
|
|
||||||
+++ libgcrypt-1.8.3/src/g10lib.h 2018-07-12 13:24:54.089403030 +0200
|
|
||||||
@@ -422,6 +422,8 @@ gpg_err_code_t _gcry_sexp_vextract_param
|
|
||||||
|
|
||||||
/*-- fips.c --*/
|
|
||||||
|
|
||||||
+void _gcry_initialize_fsm_lock (void);
|
|
||||||
+
|
|
||||||
void _gcry_initialize_fips_mode (int force);
|
|
||||||
|
|
||||||
int _gcry_fips_mode (void);
|
|
||||||
|
@ -1,12 +1,18 @@
|
|||||||
diff -up libgcrypt-1.8.3/cipher/md.c.fips-enforce libgcrypt-1.8.3/cipher/md.c
|
diff -up libgcrypt-1.8.3/cipher/md.c.fips-enforce libgcrypt-1.8.3/cipher/md.c
|
||||||
--- libgcrypt-1.8.3/cipher/md.c.fips-enforce 2018-11-01 15:40:36.051865535 +0100
|
--- libgcrypt-1.8.3/cipher/md.c.fips-enforce 2017-11-23 19:16:58.000000000 +0100
|
||||||
+++ libgcrypt-1.8.3/cipher/md.c 2019-06-03 11:50:21.435401753 +0200
|
+++ libgcrypt-1.8.3/cipher/md.c 2020-04-17 15:07:31.364945130 +0200
|
||||||
@@ -409,7 +409,7 @@ md_enable (gcry_md_hd_t hd, int algorith
|
@@ -409,13 +409,10 @@ md_enable (gcry_md_hd_t hd, int algorith
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
- if (!err && algorithm == GCRY_MD_MD5 && fips_mode ())
|
- if (!err && algorithm == GCRY_MD_MD5 && fips_mode ())
|
||||||
+ if (!err && !spec->flags.fips && fips_mode ())
|
+ if (!err && !spec->flags.fips && fips_mode ())
|
||||||
{
|
{
|
||||||
|
- _gcry_inactivate_fips_mode ("MD5 used");
|
||||||
if (_gcry_enforced_fips_mode () )
|
if (_gcry_enforced_fips_mode () )
|
||||||
{
|
{
|
||||||
|
- /* We should never get to here because we do not register
|
||||||
|
- MD5 in enforced fips mode. But better throw an error. */
|
||||||
|
err = GPG_ERR_DIGEST_ALGO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
139
libgcrypt-1.8.5-fips-module.patch
Normal file
139
libgcrypt-1.8.5-fips-module.patch
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
diff -up libgcrypt-1.8.5/src/fips.c.fips-module libgcrypt-1.8.5/src/fips.c
|
||||||
|
--- libgcrypt-1.8.5/src/fips.c.fips-module 2020-04-20 19:07:45.924919645 +0200
|
||||||
|
+++ libgcrypt-1.8.5/src/fips.c 2020-04-20 19:10:33.690722470 +0200
|
||||||
|
@@ -35,10 +35,6 @@
|
||||||
|
#include "hmac256.h"
|
||||||
|
|
||||||
|
|
||||||
|
-/* The name of the file used to force libgcrypt into fips mode. */
|
||||||
|
-#define FIPS_FORCE_FILE "/etc/gcrypt/fips_enabled"
|
||||||
|
-
|
||||||
|
-
|
||||||
|
/* The states of the finite state machine used in fips mode. */
|
||||||
|
enum module_states
|
||||||
|
{
|
||||||
|
@@ -122,54 +118,6 @@ _gcry_initialize_fips_mode (int force)
|
||||||
|
goto leave;
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* For testing the system it is useful to override the system
|
||||||
|
- provided detection of the FIPS mode and force FIPS mode using a
|
||||||
|
- file. The filename is hardwired so that there won't be any
|
||||||
|
- confusion on whether /etc/gcrypt/ or /usr/local/etc/gcrypt/ is
|
||||||
|
- actually used. The file itself may be empty. */
|
||||||
|
- if ( !access (FIPS_FORCE_FILE, F_OK) )
|
||||||
|
- {
|
||||||
|
- gcry_assert (!no_fips_mode_required);
|
||||||
|
- goto leave;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /* Checking based on /proc file properties. */
|
||||||
|
- {
|
||||||
|
- static const char procfname[] = "/proc/sys/crypto/fips_enabled";
|
||||||
|
- FILE *fp;
|
||||||
|
- int saved_errno;
|
||||||
|
-
|
||||||
|
- fp = fopen (procfname, "r");
|
||||||
|
- if (fp)
|
||||||
|
- {
|
||||||
|
- char line[256];
|
||||||
|
-
|
||||||
|
- if (fgets (line, sizeof line, fp) && atoi (line))
|
||||||
|
- {
|
||||||
|
- /* System is in fips mode. */
|
||||||
|
- fclose (fp);
|
||||||
|
- gcry_assert (!no_fips_mode_required);
|
||||||
|
- goto leave;
|
||||||
|
- }
|
||||||
|
- fclose (fp);
|
||||||
|
- }
|
||||||
|
- else if ((saved_errno = errno) != ENOENT
|
||||||
|
- && saved_errno != EACCES
|
||||||
|
- && !access ("/proc/version", F_OK) )
|
||||||
|
- {
|
||||||
|
- /* Problem reading the fips file despite that we have the proc
|
||||||
|
- file system. We better stop right away. */
|
||||||
|
- log_info ("FATAL: error reading `%s' in libgcrypt: %s\n",
|
||||||
|
- procfname, strerror (saved_errno));
|
||||||
|
-#ifdef HAVE_SYSLOG
|
||||||
|
- syslog (LOG_USER|LOG_ERR, "Libgcrypt error: "
|
||||||
|
- "reading `%s' failed: %s - abort",
|
||||||
|
- procfname, strerror (saved_errno));
|
||||||
|
-#endif /*HAVE_SYSLOG*/
|
||||||
|
- abort ();
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
/* Fips not not requested, set flag. */
|
||||||
|
no_fips_mode_required = 1;
|
||||||
|
|
||||||
|
diff -up libgcrypt-1.8.5/src/g10lib.h.fips-module libgcrypt-1.8.5/src/g10lib.h
|
||||||
|
--- libgcrypt-1.8.5/src/g10lib.h.fips-module 2020-04-20 19:07:45.918919759 +0200
|
||||||
|
+++ libgcrypt-1.8.5/src/g10lib.h 2020-04-20 19:11:05.003125740 +0200
|
||||||
|
@@ -422,6 +422,9 @@ gpg_err_code_t _gcry_sexp_vextract_param
|
||||||
|
|
||||||
|
/*-- fips.c --*/
|
||||||
|
|
||||||
|
+/* The name of the file used to force libgcrypt into fips mode. */
|
||||||
|
+#define FIPS_FORCE_FILE "/etc/gcrypt/fips_enabled"
|
||||||
|
+
|
||||||
|
void _gcry_initialize_fips_mode (int force);
|
||||||
|
|
||||||
|
int _gcry_fips_mode (void);
|
||||||
|
diff -up libgcrypt-1.8.5/src/global.c.fips-module libgcrypt-1.8.5/src/global.c
|
||||||
|
--- libgcrypt-1.8.5/src/global.c.fips-module 2020-04-20 19:07:45.919919741 +0200
|
||||||
|
+++ libgcrypt-1.8.5/src/global.c 2020-04-20 19:07:45.950919149 +0200
|
||||||
|
@@ -160,6 +160,53 @@ void __attribute__ ((constructor)) _gcry
|
||||||
|
rv = access (FIPS_MODULE_PATH, F_OK);
|
||||||
|
if (rv < 0 && errno != ENOENT)
|
||||||
|
rv = 0;
|
||||||
|
+
|
||||||
|
+ /* For testing the system it is useful to override the system
|
||||||
|
+ provided detection of the FIPS mode and force FIPS mode using a
|
||||||
|
+ file. The filename is hardwired so that there won't be any
|
||||||
|
+ confusion on whether /etc/gcrypt/ or /usr/local/etc/gcrypt/ is
|
||||||
|
+ actually used. The file itself may be empty. */
|
||||||
|
+ if ( !access (FIPS_FORCE_FILE, F_OK) )
|
||||||
|
+ {
|
||||||
|
+ rv = 0;
|
||||||
|
+ force_fips_mode = 1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Checking based on /proc file properties. */
|
||||||
|
+ {
|
||||||
|
+ static const char procfname[] = "/proc/sys/crypto/fips_enabled";
|
||||||
|
+ FILE *fp;
|
||||||
|
+ int saved_errno;
|
||||||
|
+
|
||||||
|
+ fp = fopen (procfname, "r");
|
||||||
|
+ if (fp)
|
||||||
|
+ {
|
||||||
|
+ char line[256];
|
||||||
|
+
|
||||||
|
+ if (fgets (line, sizeof line, fp) && atoi (line))
|
||||||
|
+ {
|
||||||
|
+ /* System is in fips mode. */
|
||||||
|
+ rv = 0;
|
||||||
|
+ force_fips_mode = 1;
|
||||||
|
+ }
|
||||||
|
+ fclose (fp);
|
||||||
|
+ }
|
||||||
|
+ else if ((saved_errno = errno) != ENOENT
|
||||||
|
+ && saved_errno != EACCES
|
||||||
|
+ && !access ("/proc/version", F_OK) )
|
||||||
|
+ {
|
||||||
|
+ /* Problem reading the fips file despite that we have the proc
|
||||||
|
+ file system. We better stop right away. */
|
||||||
|
+ log_info ("FATAL: error reading `%s' in libgcrypt: %s\n",
|
||||||
|
+ procfname, strerror (saved_errno));
|
||||||
|
+#ifdef HAVE_SYSLOG
|
||||||
|
+ syslog (LOG_USER|LOG_ERR, "Libgcrypt error: "
|
||||||
|
+ "reading `%s' failed: %s - abort",
|
||||||
|
+ procfname, strerror (saved_errno));
|
||||||
|
+#endif /*HAVE_SYSLOG*/
|
||||||
|
+ abort ();
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (!rv)
|
||||||
|
{
|
@ -1,6 +1,6 @@
|
|||||||
Name: libgcrypt
|
Name: libgcrypt
|
||||||
Version: 1.8.5
|
Version: 1.8.5
|
||||||
Release: 3%{?dist}
|
Release: 4%{?dist}
|
||||||
URL: http://www.gnupg.org/
|
URL: http://www.gnupg.org/
|
||||||
Source0: libgcrypt-%{version}-hobbled.tar.xz
|
Source0: libgcrypt-%{version}-hobbled.tar.xz
|
||||||
# The original libgcrypt sources now contain potentially patented ECC
|
# The original libgcrypt sources now contain potentially patented ECC
|
||||||
@ -36,7 +36,7 @@ Patch18: libgcrypt-1.8.3-fips-ctor.patch
|
|||||||
# Block some operations if in FIPS non-operational state
|
# Block some operations if in FIPS non-operational state
|
||||||
Patch22: libgcrypt-1.7.3-fips-reqs.patch
|
Patch22: libgcrypt-1.7.3-fips-reqs.patch
|
||||||
# Do not try to open /dev/urandom if getrandom() works
|
# Do not try to open /dev/urandom if getrandom() works
|
||||||
Patch24: libgcrypt-1.8.4-getrandom.patch
|
Patch24: libgcrypt-1.8.5-getrandom.patch
|
||||||
# CMAC selftest for FIPS POST
|
# CMAC selftest for FIPS POST
|
||||||
Patch25: libgcrypt-1.8.3-cmac-selftest.patch
|
Patch25: libgcrypt-1.8.3-cmac-selftest.patch
|
||||||
# Continuous FIPS entropy test
|
# Continuous FIPS entropy test
|
||||||
@ -47,6 +47,8 @@ Patch27: libgcrypt-1.8.3-md-fips-enforce.patch
|
|||||||
Patch28: libgcrypt-1.8.5-intel-cet.patch
|
Patch28: libgcrypt-1.8.5-intel-cet.patch
|
||||||
# Fix build on ARMv7
|
# Fix build on ARMv7
|
||||||
Patch29: libgcrypt-1.8.5-build.patch
|
Patch29: libgcrypt-1.8.5-build.patch
|
||||||
|
# FIPS module is redefined a little bit (implicit by kernel FIPS mode)
|
||||||
|
Patch30: libgcrypt-1.8.5-fips-module.patch
|
||||||
|
|
||||||
%define gcrylibdir %{_libdir}
|
%define gcrylibdir %{_libdir}
|
||||||
|
|
||||||
@ -95,6 +97,7 @@ applications using libgcrypt.
|
|||||||
%patch27 -p1 -b .fips-enforce
|
%patch27 -p1 -b .fips-enforce
|
||||||
%patch28 -p1 -b .intel-cet
|
%patch28 -p1 -b .intel-cet
|
||||||
%patch29 -p1 -b .build
|
%patch29 -p1 -b .build
|
||||||
|
%patch30 -p1 -b .fips-module
|
||||||
|
|
||||||
cp %{SOURCE4} cipher/
|
cp %{SOURCE4} cipher/
|
||||||
cp %{SOURCE5} %{SOURCE6} tests/
|
cp %{SOURCE5} %{SOURCE6} tests/
|
||||||
@ -194,6 +197,10 @@ install -m644 %{SOURCE7} $RPM_BUILD_ROOT/etc/gcrypt/random.conf
|
|||||||
%license COPYING
|
%license COPYING
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Apr 20 2020 Tomáš Mráz <tmraz@redhat.com> 1.8.5-4
|
||||||
|
- FIPS selftest is run directly from the constructor
|
||||||
|
- FIPS module is implicit with kernel FIPS flag
|
||||||
|
|
||||||
* Thu Jan 30 2020 Tomáš Mráz <tmraz@redhat.com> 1.8.5-3
|
* Thu Jan 30 2020 Tomáš Mráz <tmraz@redhat.com> 1.8.5-3
|
||||||
- fix the build on ARMv7
|
- fix the build on ARMv7
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user