Network Security Services
CentOS Sources
2018-05-14 74449011e876d8839a7a1053f27fcea5cd1ccf4e
commit | author | age
5f1c2b 1 diff -up nss/lib/pk11wrap/pk11pars.c.852023_enable_fips_when_in_fips_mode nss/lib/pk11wrap/pk11pars.c
744490 2 --- nss/lib/pk11wrap/pk11pars.c.852023_enable_fips_when_in_fips_mode    2018-03-05 16:58:32.000000000 +0100
CS 3 +++ nss/lib/pk11wrap/pk11pars.c    2018-03-09 17:24:39.815838810 +0100
4 @@ -671,6 +671,10 @@ SECMOD_CreateModuleEx(const char *librar
5f1c2b 5  
CS 6      mod->internal = NSSUTIL_ArgHasFlag("flags", "internal", nssc);
7      mod->isFIPS = NSSUTIL_ArgHasFlag("flags", "FIPS", nssc);
f57139 8 +    /* if the system FIPS mode is enabled, force FIPS to be on */
CB 9 +    if (SECMOD_GetSystemFIPSEnabled()) {
10 +    mod->isFIPS = PR_TRUE;
11 +    }
5f1c2b 12      mod->isCritical = NSSUTIL_ArgHasFlag("flags", "critical", nssc);
CS 13      slotParams = NSSUTIL_ArgGetParamValue("slotParams", nssc);
14      mod->slotInfo = NSSUTIL_ArgParseSlotInfo(mod->arena, slotParams,
15 diff -up nss/lib/pk11wrap/pk11util.c.852023_enable_fips_when_in_fips_mode nss/lib/pk11wrap/pk11util.c
744490 16 --- nss/lib/pk11wrap/pk11util.c.852023_enable_fips_when_in_fips_mode    2018-03-05 16:58:32.000000000 +0100
CS 17 +++ nss/lib/pk11wrap/pk11util.c    2018-03-09 17:25:46.804347730 +0100
18 @@ -95,6 +95,26 @@ SECMOD_Shutdown()
f57139 19      return SECSuccess;
CB 20  }
21  
22 +int SECMOD_GetSystemFIPSEnabled(void) {
23 +#ifdef LINUX
24 +    FILE *f;
25 +    char d;
26 +    size_t size;
27 +
28 +    f = fopen("/proc/sys/crypto/fips_enabled", "r");
29 +    if (!f)
30 +        return 0;
31 +
32 +    size = fread(&d, 1, 1, f);
33 +    fclose(f);
34 +    if (size != 1)
35 +        return 0;
36 +    if (d == '1')
37 +        return 1;
38 +#endif
39 +    return 0;
40 +}
5f1c2b 41 +
f57139 42  /*
CB 43   * retrieve the internal module
1b6f66 44   */
744490 45 @@ -428,7 +448,7 @@ SECMOD_DeleteInternalModule(const char *
f57139 46      SECMODModuleList **mlpp;
CB 47      SECStatus rv = SECFailure;
48  
49 -    if (pendingModule) {
50 +    if (SECMOD_GetSystemFIPSEnabled() || pendingModule) {
5f1c2b 51          PORT_SetError(SEC_ERROR_MODULE_STUCK);
CS 52          return rv;
f57139 53      }
744490 54 @@ -963,7 +983,7 @@ SECMOD_CanDeleteInternalModule(void)
CS 55  #ifdef NSS_FIPS_DISABLED
56      return PR_FALSE;
57  #else
5f1c2b 58 -    return (PRBool)(pendingModule == NULL);
1b6f66 59 +    return (PRBool) ((pendingModule == NULL) && !SECMOD_GetSystemFIPSEnabled());
744490 60  #endif
f57139 61  }
CB 62  
5f1c2b 63 diff -up nss/lib/pk11wrap/secmodi.h.852023_enable_fips_when_in_fips_mode nss/lib/pk11wrap/secmodi.h
744490 64 --- nss/lib/pk11wrap/secmodi.h.852023_enable_fips_when_in_fips_mode    2018-03-05 16:58:32.000000000 +0100
CS 65 +++ nss/lib/pk11wrap/secmodi.h    2018-03-09 17:24:39.816838788 +0100
5f1c2b 66 @@ -115,6 +115,13 @@ PK11SymKey *pk11_TokenKeyGenWithFlagsAnd
f57139 67  CK_MECHANISM_TYPE pk11_GetPBECryptoMechanism(SECAlgorithmID *algid,
5f1c2b 68                                               SECItem **param, SECItem *pwd, PRBool faulty3DES);
f57139 69  
CB 70 +/* Get the state of the system FIPS mode */
71 +/* NSS uses this to force FIPS mode if the system bit is on. Applications which
72 + * use the SECMOD_CanDeleteInteral() to check to see if they can switch to or
73 + * from FIPS mode will automatically be told that they can't swith out of FIPS
74 + * mode */
75 +int SECMOD_GetSystemFIPSEnabled();
5f1c2b 76 +
f57139 77  extern void pk11sdr_Init(void);
CB 78  extern void pk11sdr_Shutdown(void);
1b6f66 79