536 lines
21 KiB
Diff
536 lines
21 KiB
Diff
From a31edb693bb79f1ad8931db284f1dbceae178f27 Mon Sep 17 00:00:00 2001
|
|
From: Paolo Bonzini <pbonzini@redhat.com>
|
|
Date: Tue, 19 Jun 2018 16:50:02 +0100
|
|
Subject: [PATCH 16/19] qemu: capabilities: force update if the microcode
|
|
version does not match
|
|
|
|
A microcode update can cause the CPUID bits to change; an example
|
|
from the past was the update that disabled TSX on several Haswell
|
|
and Broadwell machines.
|
|
|
|
Therefore, place microcode version in the virQEMUCaps struct and
|
|
XML, and rebuild the cache if the versions do not match.
|
|
|
|
CVE-2017-5715
|
|
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
---
|
|
src/qemu/qemu_capabilities.c | 40 ++++++++++++++++++-
|
|
src/qemu/qemu_capabilities.h | 6 ++-
|
|
src/qemu/qemu_capspriv.h | 6 +++
|
|
src/qemu/qemu_driver.c | 9 ++++-
|
|
.../caps_1.2.2.x86_64.xml | 1 +
|
|
.../caps_1.3.1.x86_64.xml | 1 +
|
|
.../caps_1.4.2.x86_64.xml | 1 +
|
|
.../caps_1.5.3.x86_64.xml | 1 +
|
|
.../caps_1.6.0.x86_64.xml | 1 +
|
|
.../caps_1.7.0.x86_64.xml | 1 +
|
|
.../caps_2.1.1.x86_64.xml | 1 +
|
|
.../caps_2.4.0.x86_64.xml | 1 +
|
|
.../caps_2.5.0.x86_64.xml | 1 +
|
|
.../caps_2.6.0-gicv2.aarch64.xml | 1 +
|
|
.../caps_2.6.0-gicv3.aarch64.xml | 1 +
|
|
.../caps_2.6.0.ppc64le.xml | 1 +
|
|
.../caps_2.6.0.x86_64.xml | 1 +
|
|
.../qemucapabilitiesdata/caps_2.7.0.s390x.xml | 1 +
|
|
.../caps_2.7.0.x86_64.xml | 1 +
|
|
.../qemucapabilitiesdata/caps_2.8.0.s390x.xml | 1 +
|
|
.../caps_2.8.0.x86_64.xml | 1 +
|
|
.../caps_2.9.0.ppc64le.xml | 1 +
|
|
.../qemucapabilitiesdata/caps_2.9.0.s390x.xml | 1 +
|
|
.../caps_2.9.0.x86_64.xml | 1 +
|
|
tests/qemucapabilitiestest.c | 14 +++++--
|
|
tests/qemucapsprobe.c | 2 +-
|
|
tests/testutilsqemu.c | 2 +-
|
|
27 files changed, 89 insertions(+), 10 deletions(-)
|
|
|
|
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
|
|
index 2de84715ea..72b70ce750 100644
|
|
--- a/src/qemu/qemu_capabilities.c
|
|
+++ b/src/qemu/qemu_capabilities.c
|
|
@@ -500,6 +500,7 @@ struct _virQEMUCaps {
|
|
unsigned int version;
|
|
unsigned int kvmVersion;
|
|
unsigned int libvirtVersion;
|
|
+ unsigned int microcodeVersion;
|
|
char *package;
|
|
|
|
virArch arch;
|
|
@@ -2304,6 +2305,7 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps)
|
|
|
|
ret->version = qemuCaps->version;
|
|
ret->kvmVersion = qemuCaps->kvmVersion;
|
|
+ ret->microcodeVersion = qemuCaps->microcodeVersion;
|
|
|
|
if (VIR_STRDUP(ret->package, qemuCaps->package) < 0)
|
|
goto error;
|
|
@@ -3809,6 +3811,7 @@ struct _virQEMUCapsCachePriv {
|
|
uid_t runUid;
|
|
gid_t runGid;
|
|
virArch hostArch;
|
|
+ unsigned int microcodeVersion;
|
|
};
|
|
typedef struct _virQEMUCapsCachePriv virQEMUCapsCachePriv;
|
|
typedef virQEMUCapsCachePriv *virQEMUCapsCachePrivPtr;
|
|
@@ -3931,6 +3934,13 @@ virQEMUCapsLoadCache(virArch hostArch,
|
|
goto cleanup;
|
|
}
|
|
|
|
+ if (virXPathUInt("string(./microcodeVersion)", ctxt,
|
|
+ &qemuCaps->microcodeVersion) < 0) {
|
|
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
|
+ _("missing microcode version in QEMU capabilities cache"));
|
|
+ goto cleanup;
|
|
+ }
|
|
+
|
|
if (virXPathBoolean("boolean(./package)", ctxt) > 0) {
|
|
qemuCaps->package = virXPathString("string(./package)", ctxt);
|
|
if (!qemuCaps->package &&
|
|
@@ -4195,6 +4205,9 @@ virQEMUCapsFormatCache(virQEMUCapsPtr qemuCaps)
|
|
virBufferAsprintf(&buf, "<kvmVersion>%d</kvmVersion>\n",
|
|
qemuCaps->kvmVersion);
|
|
|
|
+ virBufferAsprintf(&buf, "<microcodeVersion>%u</microcodeVersion>\n",
|
|
+ qemuCaps->microcodeVersion);
|
|
+
|
|
if (qemuCaps->package)
|
|
virBufferAsprintf(&buf, "<package>%s</package>\n",
|
|
qemuCaps->package);
|
|
@@ -4336,6 +4349,16 @@ virQEMUCapsIsValid(void *data,
|
|
return false;
|
|
}
|
|
|
|
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM) &&
|
|
+ priv->microcodeVersion != qemuCaps->microcodeVersion) {
|
|
+ VIR_DEBUG("Outdated capabilities for '%s': microcode version changed "
|
|
+ "(%u vs %u)",
|
|
+ qemuCaps->binary,
|
|
+ priv->microcodeVersion,
|
|
+ qemuCaps->microcodeVersion);
|
|
+ return false;
|
|
+ }
|
|
+
|
|
return true;
|
|
}
|
|
|
|
@@ -5151,6 +5174,7 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch,
|
|
const char *libDir,
|
|
uid_t runUid,
|
|
gid_t runGid,
|
|
+ unsigned int microcodeVersion,
|
|
bool qmpOnly)
|
|
{
|
|
virQEMUCapsPtr qemuCaps;
|
|
@@ -5207,6 +5231,9 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch,
|
|
virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_KVM);
|
|
virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_QEMU);
|
|
|
|
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
|
|
+ qemuCaps->microcodeVersion = microcodeVersion;
|
|
+
|
|
cleanup:
|
|
VIR_FREE(qmperr);
|
|
return qemuCaps;
|
|
@@ -5228,6 +5255,7 @@ virQEMUCapsNewData(const char *binary,
|
|
priv->libDir,
|
|
priv->runUid,
|
|
priv->runGid,
|
|
+ priv->microcodeVersion,
|
|
false);
|
|
}
|
|
|
|
@@ -5310,7 +5338,8 @@ virFileCachePtr
|
|
virQEMUCapsCacheNew(const char *libDir,
|
|
const char *cacheDir,
|
|
uid_t runUid,
|
|
- gid_t runGid)
|
|
+ gid_t runGid,
|
|
+ unsigned int microcodeVersion)
|
|
{
|
|
char *capsCacheDir = NULL;
|
|
virFileCachePtr cache = NULL;
|
|
@@ -5333,6 +5362,7 @@ virQEMUCapsCacheNew(const char *libDir,
|
|
|
|
priv->runUid = runUid;
|
|
priv->runGid = runGid;
|
|
+ priv->microcodeVersion = microcodeVersion;
|
|
|
|
cleanup:
|
|
VIR_FREE(capsCacheDir);
|
|
@@ -5810,3 +5840,11 @@ virQEMUCapsFillDomainCaps(virCapsPtr caps,
|
|
return -1;
|
|
return 0;
|
|
}
|
|
+
|
|
+
|
|
+void
|
|
+virQEMUCapsSetMicrocodeVersion(virQEMUCapsPtr qemuCaps,
|
|
+ unsigned int microcodeVersion)
|
|
+{
|
|
+ qemuCaps->microcodeVersion = microcodeVersion;
|
|
+}
|
|
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
|
|
index 9c92d6b469..eea296c9c3 100644
|
|
--- a/src/qemu/qemu_capabilities.h
|
|
+++ b/src/qemu/qemu_capabilities.h
|
|
@@ -514,8 +514,10 @@ void virQEMUCapsFilterByMachineType(virQEMUCapsPtr qemuCaps,
|
|
const char *machineType);
|
|
|
|
virFileCachePtr virQEMUCapsCacheNew(const char *libDir,
|
|
- const char *cacheDir,
|
|
- uid_t uid, gid_t gid);
|
|
+ const char *cacheDir,
|
|
+ uid_t uid,
|
|
+ gid_t gid,
|
|
+ unsigned int microcodeVersion);
|
|
virQEMUCapsPtr virQEMUCapsCacheLookup(virFileCachePtr cache,
|
|
const char *binary);
|
|
virQEMUCapsPtr virQEMUCapsCacheLookupCopy(virFileCachePtr cache,
|
|
diff --git a/src/qemu/qemu_capspriv.h b/src/qemu/qemu_capspriv.h
|
|
index d05256bd35..38c14ffa01 100644
|
|
--- a/src/qemu/qemu_capspriv.h
|
|
+++ b/src/qemu/qemu_capspriv.h
|
|
@@ -36,6 +36,7 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch,
|
|
const char *libDir,
|
|
uid_t runUid,
|
|
gid_t runGid,
|
|
+ unsigned int microcodeVersion,
|
|
bool qmpOnly);
|
|
|
|
int virQEMUCapsLoadCache(virArch hostArch,
|
|
@@ -101,4 +102,9 @@ virQEMUCapsParseHelpStr(const char *qemu,
|
|
int
|
|
virQEMUCapsParseDeviceStr(virQEMUCapsPtr qemuCaps,
|
|
const char *str);
|
|
+
|
|
+void
|
|
+virQEMUCapsSetMicrocodeVersion(virQEMUCapsPtr qemuCaps,
|
|
+ unsigned int microcodeVersion);
|
|
+
|
|
#endif
|
|
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
|
index 208ccc9bc3..d8dc5388ea 100644
|
|
--- a/src/qemu/qemu_driver.c
|
|
+++ b/src/qemu/qemu_driver.c
|
|
@@ -631,6 +631,8 @@ qemuStateInitialize(bool privileged,
|
|
gid_t run_gid = -1;
|
|
char *hugepagePath = NULL;
|
|
size_t i;
|
|
+ virCPUDefPtr hostCPU = NULL;
|
|
+ unsigned int microcodeVersion = 0;
|
|
|
|
if (VIR_ALLOC(qemu_driver) < 0)
|
|
return -1;
|
|
@@ -853,10 +855,15 @@ qemuStateInitialize(bool privileged,
|
|
run_gid = cfg->group;
|
|
}
|
|
|
|
+ if ((hostCPU = virCPUProbeHost(virArchFromHost())))
|
|
+ microcodeVersion = hostCPU->microcodeVersion;
|
|
+ virCPUDefFree(hostCPU);
|
|
+
|
|
qemu_driver->qemuCapsCache = virQEMUCapsCacheNew(cfg->libDir,
|
|
cfg->cacheDir,
|
|
run_uid,
|
|
- run_gid);
|
|
+ run_gid,
|
|
+ microcodeVersion);
|
|
if (!qemu_driver->qemuCapsCache)
|
|
goto error;
|
|
|
|
diff --git a/tests/qemucapabilitiesdata/caps_1.2.2.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.2.2.x86_64.xml
|
|
index 956284d5d3..f3f66cd8f5 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_1.2.2.x86_64.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_1.2.2.x86_64.xml
|
|
@@ -111,6 +111,7 @@
|
|
<flag name='query-cpu-definitions'/>
|
|
<version>1002002</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>26900</microcodeVersion>
|
|
<package></package>
|
|
<arch>x86_64</arch>
|
|
<cpu type='kvm' name='qemu64'/>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_1.3.1.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.3.1.x86_64.xml
|
|
index 99384ce5e6..1c4d5ff4a4 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_1.3.1.x86_64.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_1.3.1.x86_64.xml
|
|
@@ -129,6 +129,7 @@
|
|
<flag name='query-cpu-definitions'/>
|
|
<version>1003001</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>30198</microcodeVersion>
|
|
<package></package>
|
|
<arch>x86_64</arch>
|
|
<cpu type='kvm' name='qemu64'/>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_1.4.2.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.4.2.x86_64.xml
|
|
index aea043c57d..a50383c259 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_1.4.2.x86_64.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_1.4.2.x86_64.xml
|
|
@@ -130,6 +130,7 @@
|
|
<flag name='query-cpu-definitions'/>
|
|
<version>1004002</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>30915</microcodeVersion>
|
|
<package></package>
|
|
<arch>x86_64</arch>
|
|
<cpu type='kvm' name='Opteron_G5'/>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml
|
|
index 6f860e4f25..ad3e122775 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml
|
|
@@ -142,6 +142,7 @@
|
|
<flag name='kernel-irqchip'/>
|
|
<version>1005003</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>47019</microcodeVersion>
|
|
<package></package>
|
|
<arch>x86_64</arch>
|
|
<cpu type='kvm' name='Opteron_G5'/>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml
|
|
index e5dc8360de..7b2324d697 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml
|
|
@@ -147,6 +147,7 @@
|
|
<flag name='kernel-irqchip'/>
|
|
<version>1006000</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>45248</microcodeVersion>
|
|
<package></package>
|
|
<arch>x86_64</arch>
|
|
<cpu type='kvm' name='Opteron_G5'/>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml
|
|
index 86d87eaf0c..4ba509a753 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml
|
|
@@ -149,6 +149,7 @@
|
|
<flag name='kernel-irqchip'/>
|
|
<version>1007000</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>50692</microcodeVersion>
|
|
<package></package>
|
|
<arch>x86_64</arch>
|
|
<cpu type='kvm' name='Opteron_G5'/>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml
|
|
index 2fa551b1a0..416703ac89 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml
|
|
@@ -165,6 +165,7 @@
|
|
<flag name='kernel-irqchip'/>
|
|
<version>2001001</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>59488</microcodeVersion>
|
|
<package></package>
|
|
<arch>x86_64</arch>
|
|
<cpu type='kvm' name='Opteron_G5'/>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml
|
|
index f97e4cb813..4550139e0c 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml
|
|
@@ -190,6 +190,7 @@
|
|
<flag name='virtio-gpu.max_outputs'/>
|
|
<version>2004000</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>75653</microcodeVersion>
|
|
<package></package>
|
|
<arch>x86_64</arch>
|
|
<cpu type='kvm' name='Opteron_G5'/>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml
|
|
index 2ba40fc494..6072438688 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml
|
|
@@ -196,6 +196,7 @@
|
|
<flag name='virtio-gpu.max_outputs'/>
|
|
<version>2005000</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>216775</microcodeVersion>
|
|
<package></package>
|
|
<arch>x86_64</arch>
|
|
<cpu type='kvm' name='Opteron_G5'/>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml
|
|
index 0b34fa30d4..6fc0ab25e0 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml
|
|
@@ -174,6 +174,7 @@
|
|
<flag name='virtio-gpu.max_outputs'/>
|
|
<version>2006000</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>228838</microcodeVersion>
|
|
<package></package>
|
|
<arch>aarch64</arch>
|
|
<cpu type='kvm' name='pxa262'/>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml
|
|
index d41d578c7e..1846bf6a7c 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml
|
|
@@ -174,6 +174,7 @@
|
|
<flag name='virtio-gpu.max_outputs'/>
|
|
<version>2006000</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>228838</microcodeVersion>
|
|
<package></package>
|
|
<arch>aarch64</arch>
|
|
<cpu type='kvm' name='pxa262'/>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml b/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml
|
|
index f1c9fc98a4..199fc2cd22 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml
|
|
@@ -169,6 +169,7 @@
|
|
<flag name='virtio-gpu.max_outputs'/>
|
|
<version>2006000</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>263602</microcodeVersion>
|
|
<package></package>
|
|
<arch>ppc64</arch>
|
|
<cpu type='kvm' name='default'/>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml
|
|
index bdf006f6be..5897fbc0c9 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml
|
|
@@ -206,6 +206,7 @@
|
|
<flag name='virtio-gpu.max_outputs'/>
|
|
<version>2006000</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>227579</microcodeVersion>
|
|
<package></package>
|
|
<arch>x86_64</arch>
|
|
<cpu type='kvm' name='Opteron_G5'/>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml
|
|
index fe7bca93b9..4c208008be 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml
|
|
@@ -136,6 +136,7 @@
|
|
<flag name='virtio-gpu.max_outputs'/>
|
|
<version>2007000</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>217559</microcodeVersion>
|
|
<package></package>
|
|
<arch>s390x</arch>
|
|
<cpu type='kvm' name='host'/>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
|
|
index 3fd28f09fe..e3a154806c 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
|
|
@@ -209,6 +209,7 @@
|
|
<flag name='virtio-gpu.max_outputs'/>
|
|
<version>2007000</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>239276</microcodeVersion>
|
|
<package> (v2.7.0)</package>
|
|
<arch>x86_64</arch>
|
|
<cpu type='kvm' name='Opteron_G5'/>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml
|
|
index 21bbb820d0..f13c783d44 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml
|
|
@@ -138,6 +138,7 @@
|
|
<flag name='virtio-gpu.max_outputs'/>
|
|
<version>2007093</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>242460</microcodeVersion>
|
|
<package></package>
|
|
<arch>s390x</arch>
|
|
<hostCPU type='kvm' model='zEC12.2-base' migratability='no'>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml
|
|
index 761f9d1415..f5bd1d7272 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml
|
|
@@ -211,6 +211,7 @@
|
|
<flag name='virtio-gpu.max_outputs'/>
|
|
<version>2008000</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>255931</microcodeVersion>
|
|
<package> (v2.8.0)</package>
|
|
<arch>x86_64</arch>
|
|
<cpu type='kvm' name='host' usable='yes'/>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.ppc64le.xml b/tests/qemucapabilitiesdata/caps_2.9.0.ppc64le.xml
|
|
index 9551907c66..2d1d0f9a89 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_2.9.0.ppc64le.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_2.9.0.ppc64le.xml
|
|
@@ -175,6 +175,7 @@
|
|
<flag name='disk-share-rw'/>
|
|
<version>2009000</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>347135</microcodeVersion>
|
|
<package> (v2.9.0)</package>
|
|
<arch>ppc64</arch>
|
|
<cpu type='kvm' name='default'/>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml
|
|
index 0a6fbd0776..3b733801f8 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml
|
|
@@ -140,6 +140,7 @@
|
|
<flag name='disk-share-rw'/>
|
|
<version>2009000</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>265878</microcodeVersion>
|
|
<package></package>
|
|
<arch>s390x</arch>
|
|
<hostCPU type='kvm' model='z13.2-base' migratability='no'>
|
|
diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
|
|
index 1294ebdb31..086594def5 100644
|
|
--- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
|
|
+++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
|
|
@@ -223,6 +223,7 @@
|
|
<flag name='disk-share-rw'/>
|
|
<version>2009000</version>
|
|
<kvmVersion>0</kvmVersion>
|
|
+ <microcodeVersion>321194</microcodeVersion>
|
|
<package> (v2.9.0)</package>
|
|
<arch>x86_64</arch>
|
|
<hostCPU type='kvm' model='base' migratability='yes'>
|
|
diff --git a/tests/qemucapabilitiestest.c b/tests/qemucapabilitiestest.c
|
|
index 3ae55fc62f..4608fffbb2 100644
|
|
--- a/tests/qemucapabilitiestest.c
|
|
+++ b/tests/qemucapabilitiestest.c
|
|
@@ -61,10 +61,16 @@ testQemuCaps(const void *opaque)
|
|
qemuMonitorTestGetMonitor(mon)) < 0)
|
|
goto cleanup;
|
|
|
|
- if (virQEMUCapsGet(capsActual, QEMU_CAPS_KVM) &&
|
|
- virQEMUCapsInitQMPMonitorTCG(capsActual,
|
|
- qemuMonitorTestGetMonitor(mon)) < 0)
|
|
- goto cleanup;
|
|
+ if (virQEMUCapsGet(capsActual, QEMU_CAPS_KVM)) {
|
|
+ if (virQEMUCapsInitQMPMonitorTCG(capsActual,
|
|
+ qemuMonitorTestGetMonitor(mon)) < 0)
|
|
+ goto cleanup;
|
|
+
|
|
+ /* Fill microcodeVersion with a "random" value which is the file
|
|
+ * length to provide a reproducible number for testing.
|
|
+ */
|
|
+ virQEMUCapsSetMicrocodeVersion(capsActual, virFileLength(repliesFile, -1));
|
|
+ }
|
|
|
|
if (!(actual = virQEMUCapsFormatCache(capsActual)))
|
|
goto cleanup;
|
|
diff --git a/tests/qemucapsprobe.c b/tests/qemucapsprobe.c
|
|
index 4b8d6229b4..a5f5a38b16 100644
|
|
--- a/tests/qemucapsprobe.c
|
|
+++ b/tests/qemucapsprobe.c
|
|
@@ -72,7 +72,7 @@ main(int argc, char **argv)
|
|
return EXIT_FAILURE;
|
|
|
|
if (!(caps = virQEMUCapsNewForBinaryInternal(VIR_ARCH_NONE, argv[1], "/tmp",
|
|
- -1, -1, true)))
|
|
+ -1, -1, 0, true)))
|
|
return EXIT_FAILURE;
|
|
|
|
virObjectUnref(caps);
|
|
diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
|
|
index 2c7124bf26..f8182033fc 100644
|
|
--- a/tests/testutilsqemu.c
|
|
+++ b/tests/testutilsqemu.c
|
|
@@ -603,7 +603,7 @@ int qemuTestDriverInit(virQEMUDriver *driver)
|
|
|
|
/* Using /dev/null for libDir and cacheDir automatically produces errors
|
|
* upon attempt to use any of them */
|
|
- driver->qemuCapsCache = virQEMUCapsCacheNew("/dev/null", "/dev/null", 0, 0);
|
|
+ driver->qemuCapsCache = virQEMUCapsCacheNew("/dev/null", "/dev/null", 0, 0, 0);
|
|
if (!driver->qemuCapsCache)
|
|
goto error;
|
|
|
|
--
|
|
2.17.0
|
|
|