qemuCheckFips(virDomainObj *vm)
{
qemuDomainObjPrivate *priv = vm->privateData;
- virQEMUCaps *qemuCaps = priv->qemuCaps;
- if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_ENABLE_FIPS))
+ if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_ENABLE_FIPS))
return false;
- if (virFileExists("/proc/sys/crypto/fips_enabled")) {
- g_autofree char *buf = NULL;
-
- if (virFileReadAll("/proc/sys/crypto/fips_enabled", 10, &buf) < 0)
- return false;
- if (STREQ(buf, "1\n"))
- return true;
- }
-
- return false;
+ return priv->driver->hostFips;
}
/* Immutable values */
bool privileged;
char *embeddedRoot;
+ bool hostFips; /* FIPS mode is enabled on the host */
/* Immutable pointers. Caller must provide locking */
virStateInhibitCallback inhibitCallback;
if (qemuMigrationDstErrorInit(qemu_driver) < 0)
goto error;
+ /* qemu-5.1 and older requires use of '-enable-fips' flag when the host
+ * is in FIPS mode. We store whether FIPS is enabled */
+ if (virFileExists("/proc/sys/crypto/fips_enabled")) {
+ g_autofree char *buf = NULL;
+
+ if (virFileReadAll("/proc/sys/crypto/fips_enabled", 10, &buf) > 0)
+ qemu_driver->hostFips = STREQ(buf, "1\n");
+ }
+
if (privileged) {
g_autofree char *channeldir = NULL;
unsigned int flags)
{
qemuDomainObjPrivate *priv = vm->privateData;
- bool enableFips = !!(flags & FLAG_FIPS_HOST);
+ bool enableFips;
size_t i;
+ drv->hostFips = flags & FLAG_FIPS_HOST;
+ enableFips = drv->hostFips;
+
if (qemuProcessCreatePretendCmdPrepare(drv, vm, migrateURI,
VIR_QEMU_PROCESS_START_COLD) < 0)
return NULL;