1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-09-13 05:44:51 +03:00

Compare commits

...

15 Commits

Author SHA1 Message Date
Ján Tomko
585be8edbe api: disallow virConnectGetDomainCapabilities on read-only connections
This API can be used to execute arbitrary emulators.
Forbid it on read-only connections.

Fixes: CVE-2019-10167
Signed-off-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
(cherry picked from commit 8afa68bac0)
Signed-off-by: Ján Tomko <jtomko@redhat.com>
2019-06-24 10:00:05 +02:00
Ján Tomko
d9a1f3deba api: disallow virDomainManagedSaveDefineXML on read-only connections
The virDomainManagedSaveDefineXML can be used to alter the domain's
config used for managedsave or even execute arbitrary emulator binaries.
Forbid it on read-only connections.

Fixes: CVE-2019-10166
Reported-by: Matthias Gerstner <mgerstner@suse.de>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
(cherry picked from commit db0b78457f)
Signed-off-by: Ján Tomko <jtomko@redhat.com>
2019-06-24 10:00:05 +02:00
Ján Tomko
1f8129c5db api: disallow virDomainSaveImageGetXMLDesc on read-only connections
The virDomainSaveImageGetXMLDesc API is taking a path parameter,
which can point to any path on the system. This file will then be
read and parsed by libvirtd running with root privileges.

Forbid it on read-only connections.

Fixes: CVE-2019-10161
Reported-by: Matthias Gerstner <mgerstner@suse.de>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
(cherry picked from commit aed6a032ce)
Signed-off-by: Ján Tomko <jtomko@redhat.com>

Conflicts:
  src/libvirt-domain.c
  src/remote/remote_protocol.x

Upstream commit 12a51f372 which introduced the VIR_DOMAIN_SAVE_IMAGE_XML_SECURE
alias for VIR_DOMAIN_XML_SECURE is not backported.
Just skip the commit since we now disallow the whole API on read-only
connections, regardless of the flag.

Signed-off-by: Ján Tomko <jtomko@redhat.com>
2019-06-24 10:00:05 +02:00
Daniel P. Berrangé
f0e0141331 logging: restrict sockets to mode 0600
The virtlogd daemon's only intended client is the libvirtd daemon. As
such it should never allow clients from other user accounts to connect.
The code already enforces this and drops clients from other UIDs, but
we can get earlier (and thus stronger) protection against DoS by setting
the socket permissions to 0600

Fixes CVE-2019-10132

Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
(cherry picked from commit e37bd65f99)
2019-05-21 13:32:22 +01:00
Daniel P. Berrangé
41f06e6095 locking: restrict sockets to mode 0600
The virtlockd daemon's only intended client is the libvirtd daemon. As
such it should never allow clients from other user accounts to connect.
The code already enforces this and drops clients from other UIDs, but
we can get earlier (and thus stronger) protection against DoS by setting
the socket permissions to 0600

Fixes CVE-2019-10132

Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
(cherry picked from commit f111e09468)
2019-05-21 13:32:22 +01:00
Daniel P. Berrangé
39fb5ab312 admin: reject clients unless their UID matches the current UID
The admin protocol RPC messages are only intended for use by the user
running the daemon. As such they should not be allowed for any client
UID that does not match the server UID.

Fixes CVE-2019-10132

Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
(cherry picked from commit 96f41cd765)
2019-05-21 13:32:22 +01:00
Jim Fehlig
47d58fb511 lockd: fix typo in virtlockd-admin.socket
Commit ce7ae55ea1 introduced a typo in virtlockd-admin socket file

/usr/lib/systemd/system/virtlockd-admin.socket:7: Unknown lvalue
'Server' in section 'Socket'

Change 'Server' to 'Service'.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
Reviewed-by: Erik Skultety <eskultet@redhat.com>
(cherry picked from commit fb327ac2c3)
2019-05-21 13:32:18 +01:00
Daniel P. Berrangé
4cb90fa233 cputest: remove stibp flag from test data
stibp flag doesn't exist in this maint branch.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2019-05-14 21:20:44 +01:00
Jiri Denemark
7bde733e90 cpu_map: Define md-clear CPUID bit
CVE-2018-12126, CVE-2018-12127, CVE-2018-12130

The bit is set when microcode provides the mechanism to invoke a flush
of various exploitable CPU buffers by invoking the VERW instruction.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
(cherry picked from commit 538d873571)

Conflicts:
	src/cpu_map/x86_features.xml
            - no CPU map split downstream

	tests/cputestdata/x86_64-cpuid-Xeon-Platinum-8268-guest.xml
	tests/cputestdata/x86_64-cpuid-Xeon-Platinum-8268-host.xml
            - test data missing downstream

	tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-guest.xml
	tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-host.xml
            - intel-pt feature is missing downstream

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2019-05-14 20:09:43 +01:00
Jiri Denemark
36151b10d3 cputest: Add data for Intel(R) Xeon(R) CPU E3-1225 v5
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
(cherry picked from commit 5cd9db3ac1)

CVE-2018-12126, CVE-2018-12127, CVE-2018-12130, CVE-2019-11091

Conflicts:
	tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-guest.xml
	tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-host.xml
            - intel-pt feature is missing

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2019-05-14 20:09:43 +01:00
Jiri Denemark
cb6bcb0312 qemu: Don't cache microcode version
My earlier commit be46f61326 was incomplete. It removed caching of
microcode version in the CPU driver, which means the capabilities XML
will see the correct microcode version. But it is also cached in the
QEMU capabilities cache where it is used to detect whether we need to
reprobe QEMU. By missing the second place, the original commit
be46f61326 made the situation even worse since libvirt would report
correct microcode version while still using the old host CPU model
(visible in domain capabilities XML).

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
(cherry picked from commit 673c62a3b7)

CVE-2018-12126, CVE-2018-12127, CVE-2018-12130

Conflicts:
	src/qemu/qemu_capabilities.c
            - virQEMUCapsCacheLookupByArch refactoring (commits
              7948ad4129 and 1a3de67001) are missing
            - commit a7424faff0 "Force QMP capability probing" is
              missing downstream

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2019-05-14 20:09:43 +01:00
Jiri Denemark
8d6ab7976f cpu_x86: Do not cache microcode version
The microcode version checks are used to invalidate cached CPU data we
get from QEMU. To minimize /proc/cpuinfo parsing the microcode version
was only read when libvirtd started and cached for the daemon's
lifetime. However, the CPU microcode can change anytime (updating the
microcode package can automatically upload it to the CPU) and we need to
stop caching it to avoid using stale CPU model data.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
(cherry picked from commit be46f61326)
2019-05-14 20:09:43 +01:00
Daniel P. Berrangé
40cf57b55f cpu: define the 'virt-ssbd' CPUID feature bit (CVE-2018-3639)
Some AMD processors only support a non-architectural means of
enabling Speculative Store Bypass Disable. To allow simplified
handling in virtual environments, hypervisors will expose an
architectural definition through CPUID bit 0x80000008_EBX[25].
This needs to be exposed to guest OS running on AMD x86 hosts to
allow them to protect against CVE-2018-3639.

Note that since this CPUID bit won't be present in the host CPUID
results on physical hosts, it will not be enabled automatically
in guests configured with "host-model" CPU unless using QEMU
version >= 2.9.0. Thus for older versions of QEMU, this feature
must be manually enabled using policy=force. Guests using the
"host-passthrough" CPU mode do not need special handling.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
(cherry picked from commit 9267342206)
2018-06-18 18:49:18 +01:00
Daniel P. Berrangé
519a6adb13 cpu: define the 'ssbd' CPUID feature bit (CVE-2018-3639)
New microcode introduces the "Speculative Store Bypass Disable"
CPUID feature bit. This needs to be exposed to guest OS to allow
them to protect against CVE-2018-3639.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
(cherry picked from commit 1dbca2ecca)
2018-06-18 18:49:08 +01:00
Laine Stump
13969ca54f nwfilter: increase pcap buffer size to be compatible with TPACKET_V3
When an nwfilter rule sets the parameter CTRL_IP_LEARNING to "dhcp",
this turns on the "dhcpsnoop" thread, which uses libpcap to monitor
traffic on the domain's tap device and extract the IP address from the
DHCP response.

If libpcap on the host is built with HAVE_TPACKET3 defined (to enable
support for TPACKET_V3), the dhcpsnoop code's initialization of the
libpcap socket would fail with the following error:

  virNWFilterSnoopDHCPOpen:1134 : internal error: pcap_setfilter: can't remove kernel filter: Bad file descriptor

It turns out that this was because TPACKET_V3 requires a larger buffer
size than libvirt was setting (we were setting it to 128k). Changing
the buffer size to 256k eliminates the error, and the dhcpsnoop thread
once again works properly.

A fuller explanation of why TPACKET_V3 requires such a large buffer,
for future git spelunkers:

libpcap calls setsockopt(... SOL_PACKET, PACKET_RX_RING...) to setup a
ring buffer for receiving packets; two of the attributes sent to this
API are called tp_frame_size, and tp_frame_nr. If libpcap was built
with HAVE_TPACKET3 defined, tp_trame_size is set to MAXIMUM_SNAPLEN
(defined in libpcap sources as 262144) and tp_frame_nr is set to:

 [the buffer size we set, i.e. PCAP_BUFFERSIZE i.e. 262144] / tp_frame_size.

So if PCAP_BUFFERSIZE < MAXIMUM_SNAPLEN, then tp_frame_nr (the number
of frames in the ring buffer) is 0, which is nonsensical. This same
value is later used as a multiplier to determine the size for a call
to malloc() (which would also fail).

(NB: if HAVE_TPACKET3 is *not* defined, then tp_frame_size is set to
the snaplen set by the user (in our case 576) plus a small amount to
account for ethernet headers, so 256k is far more than adequate)

Since the TPACKET_V3 code in libpcap actually reads multiple packets
into each frame, it's not a problem to have only a single frame
(especially when we are monitoring such infrequent traffic), so it's
okay to set this relatively small buffer size (in comparison to the
default, which is 2MB), which is important since every guest using
dhcp snooping in a nwfilter rule will hold 2 of these buffers for the
entire life of the guest.

Thanks to Christian Ehrhardt for discovering that buffer size was the
problem (this was not at all obvious from the error that was logged!)

Resolves: https://bugzilla.redhat.com/1547237
Fixes: https://bugs.launchpad.net/libvirt/+bug/1758037

Signed-off-by: Laine Stump <laine@laine.org>
Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com> (V1)
Reviewed-by: John Ferlan <jferlan@redhat.com>
Tested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
(cherry picked from commit ce5aebeacd)
2018-04-30 14:12:09 -04:00
23 changed files with 858 additions and 35 deletions

View File

@@ -66,6 +66,28 @@ remoteAdmClientNew(virNetServerClientPtr client ATTRIBUTE_UNUSED,
void *opaque)
{
struct daemonAdmClientPrivate *priv;
uid_t clientuid;
gid_t clientgid;
pid_t clientpid;
unsigned long long timestamp;
if (virNetServerClientGetUNIXIdentity(client,
&clientuid,
&clientgid,
&clientpid,
&timestamp) < 0)
return NULL;
VIR_DEBUG("New client pid %lld uid %lld",
(long long)clientpid,
(long long)clientuid);
if (geteuid() != clientuid) {
virReportRestrictedError(_("Disallowing client %lld with uid %lld"),
(long long)clientpid,
(long long)clientuid);
return NULL;
}
if (VIR_ALLOC(priv) < 0)
return NULL;

View File

@@ -295,9 +295,15 @@
<feature name='avx512-4fmaps'>
<cpuid eax_in='0x07' ecx_in='0x00' edx='0x00000008'/>
</feature>
<feature name='md-clear'> <!-- md_clear -->
<cpuid eax_in='0x07' ecx_in='0x00' edx='0x00000400'/>
</feature>
<feature name='spec-ctrl'>
<cpuid eax_in='0x07' ecx_in='0x00' edx='0x04000000'/>
</feature>
<feature name='ssbd'>
<cpuid eax_in='0x07' ecx_in='0x00' edx='0x80000000'/>
</feature>
<!-- Processor Extended State Enumeration sub leaf 1 -->
<feature name='xsaveopt'>
@@ -430,6 +436,9 @@
<feature name='ibpb'>
<cpuid eax_in='0x80000008' ebx='0x00001000'/>
</feature>
<feature name='virt-ssbd'>
<cpuid eax_in='0x80000008' ebx='0x02000000'/>
</feature>
<!-- models -->
<model name='486'>

View File

@@ -154,7 +154,6 @@ struct _virCPUx86Map {
};
static virCPUx86MapPtr cpuMap;
static unsigned int microcodeVersion;
int virCPUx86DriverOnceInit(void);
VIR_ONCE_GLOBAL_INIT(virCPUx86Driver);
@@ -1413,8 +1412,6 @@ virCPUx86DriverOnceInit(void)
if (!(cpuMap = virCPUx86LoadMap()))
return -1;
microcodeVersion = virHostCPUGetMicrocodeVersion();
return 0;
}
@@ -2454,7 +2451,7 @@ virCPUx86GetHost(virCPUDefPtr cpu,
goto cleanup;
ret = x86DecodeCPUData(cpu, cpuData, models);
cpu->microcodeVersion = microcodeVersion;
cpu->microcodeVersion = virHostCPUGetMicrocodeVersion();
cleanup:
virCPUx86DataFree(cpuData);

View File

@@ -1073,9 +1073,7 @@ virDomainRestoreFlags(virConnectPtr conn, const char *from, const char *dxml,
* previously by virDomainSave() or virDomainSaveFlags().
*
* No security-sensitive data will be included unless @flags contains
* VIR_DOMAIN_XML_SECURE; this flag is rejected on read-only
* connections. For this API, @flags should not contain either
* VIR_DOMAIN_XML_INACTIVE or VIR_DOMAIN_XML_UPDATE_CPU.
* VIR_DOMAIN_XML_SECURE.
*
* Returns a 0 terminated UTF-8 encoded XML instance, or NULL in case of
* error. The caller must free() the returned value.
@@ -1091,12 +1089,7 @@ virDomainSaveImageGetXMLDesc(virConnectPtr conn, const char *file,
virCheckConnectReturn(conn, NULL);
virCheckNonNullArgGoto(file, error);
if ((conn->flags & VIR_CONNECT_RO) && (flags & VIR_DOMAIN_XML_SECURE)) {
virReportError(VIR_ERR_OPERATION_DENIED, "%s",
_("virDomainSaveImageGetXMLDesc with secure flag"));
goto error;
}
virCheckReadOnlyGoto(conn->flags, error);
if (conn->driver->domainSaveImageGetXMLDesc) {
char *ret;
@@ -9431,6 +9424,7 @@ virDomainManagedSaveDefineXML(virDomainPtr domain, const char *dxml,
virCheckDomainReturn(domain, -1);
conn = domain->conn;
virCheckReadOnlyGoto(conn->flags, error);
if (conn->driver->domainManagedSaveDefineXML) {
int ret;
@@ -11222,6 +11216,7 @@ virConnectGetDomainCapabilities(virConnectPtr conn,
virResetLastError();
virCheckConnectReturn(conn, NULL);
virCheckReadOnlyGoto(conn->flags, error);
if (conn->driver->connectGetDomainCapabilities) {
char *ret;

View File

@@ -4,7 +4,8 @@ Before=libvirtd.service
[Socket]
ListenStream=@localstatedir@/run/libvirt/virtlockd-admin-sock
Server=virtlockd.service
Service=virtlockd.service
SocketMode=0600
[Install]
WantedBy=sockets.target

View File

@@ -4,6 +4,7 @@ Before=libvirtd.service
[Socket]
ListenStream=@localstatedir@/run/libvirt/virtlockd-sock
SocketMode=0600
[Install]
WantedBy=sockets.target

View File

@@ -5,6 +5,7 @@ Before=libvirtd.service
[Socket]
ListenStream=@localstatedir@/run/libvirt/virtlogd-admin-sock
Service=virtlogd.service
SocketMode=0600
[Install]
WantedBy=sockets.target

View File

@@ -4,6 +4,7 @@ Before=libvirtd.service
[Socket]
ListenStream=@localstatedir@/run/libvirt/virtlogd-sock
SocketMode=0600
[Install]
WantedBy=sockets.target

View File

@@ -256,10 +256,21 @@ struct _virNWFilterDHCPDecodeJob {
# define DHCP_BURST_INTERVAL_S 10 /* sec */
/*
* libpcap 1.5 requires a 128kb buffer
* 128 kb is bigger than (DHCP_PKT_BURST * PCAP_PBUFSIZE / 2)
* NB: Any libpcap built with HAVE_TPACKET3 will require
* PCAP_BUFFERSIZE to be at least 262144 (although
* pcap_set_buffer_size() with a lower value will succeed, and the
* error will only show up later when pcap_setfilter() is called).
*
* It is possible that in the future libpcap could increase the
* minimum size even further, but due to the fact that each guest
* using dhcp snooping keeps 2 pcap sockets open (and thus 2 buffers
* allocated) for the life of the guest, we want to minimize the
* length of the buffer, so instead of leaving it at the default size
* (2MB), we are setting it to the minimum viable size and including
* this clue in the source to help quickly resolve the problem when/if
* it reoccurs.
*/
# define PCAP_BUFFERSIZE (128 * 1024)
# define PCAP_BUFFERSIZE (256 * 1024)
# define MAX_QUEUED_JOBS (DHCP_PKT_BURST + 2 * DHCP_PKT_RATE)
@@ -1114,6 +1125,11 @@ virNWFilterSnoopDHCPOpen(const char *ifname, virMacAddr *mac,
goto cleanup_nohandle;
}
/* IMPORTANT: If there is any failure of *any* pcap_* function
* during setup of the socket, look to the comment where
* PCAP_BUFFERSIZE is defined. It may be too small, even if the
* generated error doesn't imply that.
*/
if (pcap_set_snaplen(handle, PCAP_PBUFSIZE) < 0 ||
pcap_set_buffer_size(handle, PCAP_BUFFERSIZE) < 0 ||
pcap_activate(handle) < 0) {

View File

@@ -5343,7 +5343,7 @@ virQEMUCapsNewData(const char *binary,
priv->libDir,
priv->runUid,
priv->runGid,
priv->microcodeVersion,
virHostCPUGetMicrocodeVersion(),
priv->kernelVersion,
false);
}
@@ -5427,8 +5427,7 @@ virFileCachePtr
virQEMUCapsCacheNew(const char *libDir,
const char *cacheDir,
uid_t runUid,
gid_t runGid,
unsigned int microcodeVersion)
gid_t runGid)
{
char *capsCacheDir = NULL;
virFileCachePtr cache = NULL;
@@ -5452,7 +5451,6 @@ virQEMUCapsCacheNew(const char *libDir,
priv->runUid = runUid;
priv->runGid = runGid;
priv->microcodeVersion = microcodeVersion;
if (uname(&uts) == 0 &&
virAsprintf(&priv->kernelVersion, "%s %s", uts.release, uts.version) < 0)
@@ -5473,8 +5471,11 @@ virQEMUCapsPtr
virQEMUCapsCacheLookup(virFileCachePtr cache,
const char *binary)
{
virQEMUCapsCachePrivPtr priv = virFileCacheGetPriv(cache);
virQEMUCapsPtr ret = NULL;
priv->microcodeVersion = virHostCPUGetMicrocodeVersion();
ret = virFileCacheLookup(cache, binary);
VIR_DEBUG("Returning caps %p for %s", ret, binary);
@@ -5520,10 +5521,13 @@ virQEMUCapsPtr
virQEMUCapsCacheLookupByArch(virFileCachePtr cache,
virArch arch)
{
virQEMUCapsCachePrivPtr priv = virFileCacheGetPriv(cache);
virQEMUCapsPtr ret = NULL;
virArch target;
struct virQEMUCapsSearchData data = { .arch = arch };
priv->microcodeVersion = virHostCPUGetMicrocodeVersion();
ret = virFileCacheLookupByFunc(cache, virQEMUCapsCompareArch, &data);
if (!ret) {
/* If the first attempt at finding capabilities has failed, try

View File

@@ -524,8 +524,7 @@ void virQEMUCapsFilterByMachineType(virQEMUCapsPtr qemuCaps,
virFileCachePtr virQEMUCapsCacheNew(const char *libDir,
const char *cacheDir,
uid_t uid,
gid_t gid,
unsigned int microcodeVersion);
gid_t gid);
virQEMUCapsPtr virQEMUCapsCacheLookup(virFileCachePtr cache,
const char *binary);
virQEMUCapsPtr virQEMUCapsCacheLookupCopy(virFileCachePtr cache,

View File

@@ -610,8 +610,6 @@ qemuStateInitialize(bool privileged,
char *hugepagePath = NULL;
char *memoryBackingPath = NULL;
size_t i;
virCPUDefPtr hostCPU = NULL;
unsigned int microcodeVersion = 0;
if (VIR_ALLOC(qemu_driver) < 0)
return -1;
@@ -831,15 +829,10 @@ 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,
microcodeVersion);
run_gid);
if (!qemu_driver->qemuCapsCache)
goto error;
@@ -6807,7 +6800,7 @@ qemuDomainSaveImageGetXMLDesc(virConnectPtr conn, const char *path,
if (fd < 0)
goto cleanup;
if (virDomainSaveImageGetXMLDescEnsureACL(conn, def, flags) < 0)
if (virDomainSaveImageGetXMLDescEnsureACL(conn, def) < 0)
goto cleanup;
ret = qemuDomainDefFormatXML(driver, def, flags);

View File

@@ -5117,8 +5117,7 @@ enum remote_procedure {
/**
* @generate: both
* @priority: high
* @acl: domain:read
* @acl: domain:read_secure:VIR_DOMAIN_XML_SECURE
* @acl: domain:write
*/
REMOTE_PROC_DOMAIN_SAVE_IMAGE_GET_XML_DESC = 235,

View File

@@ -1189,6 +1189,7 @@ mymain(void)
DO_TEST_CPUID(VIR_ARCH_X86_64, "Phenom-B95", JSON_HOST);
DO_TEST_CPUID(VIR_ARCH_X86_64, "Ryzen-7-1800X-Eight-Core", JSON_HOST);
DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-5110", JSON_NONE);
DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E3-1225-v5", JSON_MODELS);
DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E3-1245-v5", JSON_MODELS);
DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E5-2609-v3", JSON_MODELS);
DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E5-2623-v4", JSON_MODELS);

View File

@@ -0,0 +1,7 @@
<!-- Features disabled by QEMU -->
<cpudata arch='x86'>
<cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x0800c1fc' edx='0xb0600000'/>
<cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x02000000' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x00000008' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
</cpudata>

View File

@@ -0,0 +1,8 @@
<!-- Features enabled by QEMU -->
<cpudata arch='x86'>
<cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0xf7fa3203' edx='0x0f8bfbff'/>
<cpuid eax_in='0x00000006' ecx_in='0x00' eax='0x00000004' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x009c4fbb' ecx='0x00000000' edx='0x8c000400'/>
<cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x00000007' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000121' edx='0x2c100800'/>
</cpudata>

View File

@@ -0,0 +1,27 @@
<cpu mode='custom' match='exact'>
<model fallback='forbid'>Skylake-Client-IBRS</model>
<vendor>Intel</vendor>
<feature policy='require' name='ds'/>
<feature policy='require' name='acpi'/>
<feature policy='require' name='ss'/>
<feature policy='require' name='ht'/>
<feature policy='require' name='tm'/>
<feature policy='require' name='pbe'/>
<feature policy='require' name='dtes64'/>
<feature policy='require' name='monitor'/>
<feature policy='require' name='ds_cpl'/>
<feature policy='require' name='vmx'/>
<feature policy='require' name='smx'/>
<feature policy='require' name='est'/>
<feature policy='require' name='tm2'/>
<feature policy='require' name='xtpr'/>
<feature policy='require' name='pdcm'/>
<feature policy='require' name='osxsave'/>
<feature policy='require' name='tsc_adjust'/>
<feature policy='require' name='clflushopt'/>
<feature policy='require' name='md-clear'/>
<feature policy='require' name='ssbd'/>
<feature policy='require' name='xsaves'/>
<feature policy='require' name='pdpe1gb'/>
<feature policy='require' name='invtsc'/>
</cpu>

View File

@@ -0,0 +1,28 @@
<cpu>
<arch>x86_64</arch>
<model>Skylake-Client-IBRS</model>
<vendor>Intel</vendor>
<feature name='ds'/>
<feature name='acpi'/>
<feature name='ss'/>
<feature name='ht'/>
<feature name='tm'/>
<feature name='pbe'/>
<feature name='dtes64'/>
<feature name='monitor'/>
<feature name='ds_cpl'/>
<feature name='vmx'/>
<feature name='smx'/>
<feature name='est'/>
<feature name='tm2'/>
<feature name='xtpr'/>
<feature name='pdcm'/>
<feature name='osxsave'/>
<feature name='tsc_adjust'/>
<feature name='clflushopt'/>
<feature name='md-clear'/>
<feature name='ssbd'/>
<feature name='xsaves'/>
<feature name='pdpe1gb'/>
<feature name='invtsc'/>
</cpu>

View File

@@ -0,0 +1,11 @@
<cpu mode='custom' match='exact'>
<model fallback='forbid'>Skylake-Client-IBRS</model>
<vendor>Intel</vendor>
<feature policy='require' name='ss'/>
<feature policy='require' name='hypervisor'/>
<feature policy='require' name='tsc_adjust'/>
<feature policy='require' name='clflushopt'/>
<feature policy='require' name='md-clear'/>
<feature policy='require' name='ssbd'/>
<feature policy='require' name='pdpe1gb'/>
</cpu>

View File

@@ -0,0 +1,652 @@
{
"return": {
"model": {
"name": "base",
"props": {
"phys-bits": 0,
"core-id": -1,
"xlevel": 2147483656,
"cmov": true,
"ia64": false,
"aes": true,
"mmx": true,
"rdpid": false,
"arat": true,
"gfni": false,
"pause-filter": false,
"xsavec": true,
"intel-pt": false,
"osxsave": false,
"hv-frequencies": false,
"tsc-frequency": 0,
"xd": true,
"hv-vendor-id": "",
"kvm-asyncpf": true,
"kvm_asyncpf": true,
"perfctr_core": false,
"perfctr-core": false,
"mpx": true,
"pbe": false,
"decodeassists": false,
"avx512cd": false,
"sse4_1": true,
"sse4.1": true,
"sse4-1": true,
"family": 6,
"legacy-cache": true,
"vmware-cpuid-freq": true,
"avx512f": false,
"msr": true,
"mce": true,
"mca": true,
"hv-runtime": false,
"xcrypt": false,
"thread-id": -1,
"min-level": 13,
"xgetbv1": true,
"cid": false,
"hv-relaxed": false,
"hv-crash": false,
"ds": false,
"fxsr": true,
"xsaveopt": true,
"xtpr": false,
"avx512vl": false,
"avx512-vpopcntdq": false,
"phe": false,
"extapic": false,
"3dnowprefetch": true,
"avx512vbmi2": false,
"cr8legacy": false,
"stibp": true,
"cpuid-0xb": true,
"xcrypt-en": false,
"kvm_pv_eoi": true,
"apic-id": 4294967295,
"pn": false,
"dca": false,
"vendor": "GenuineIntel",
"pku": false,
"smx": false,
"cmp_legacy": false,
"cmp-legacy": false,
"node-id": -1,
"avx512-4fmaps": false,
"vmcb_clean": false,
"vmcb-clean": false,
"3dnowext": false,
"hle": true,
"npt": false,
"memory": "/machine/unattached/system[0]",
"clwb": false,
"lbrv": false,
"adx": true,
"ss": true,
"pni": true,
"svm_lock": false,
"svm-lock": false,
"pfthreshold": false,
"smep": true,
"smap": true,
"x2apic": true,
"avx512vbmi": false,
"avx512vnni": false,
"hv-stimer": false,
"i64": true,
"flushbyasid": false,
"f16c": true,
"ace2-en": false,
"pat": true,
"pae": true,
"sse": true,
"phe-en": false,
"kvm_nopiodelay": true,
"kvm-nopiodelay": true,
"tm": false,
"kvmclock-stable-bit": true,
"hypervisor": true,
"socket-id": -1,
"pcommit": false,
"syscall": true,
"level": 13,
"avx512dq": false,
"svm": false,
"full-cpuid-auto-level": true,
"hv-reset": false,
"invtsc": false,
"sse3": true,
"sse2": true,
"ssbd": true,
"est": false,
"avx512ifma": false,
"tm2": false,
"kvm-pv-eoi": true,
"cx8": true,
"kvm_mmu": false,
"kvm-mmu": false,
"sse4_2": true,
"sse4.2": true,
"sse4-2": true,
"pge": true,
"fill-mtrr-mask": true,
"avx512bitalg": false,
"nodeid_msr": false,
"pdcm": false,
"movbe": true,
"model": 94,
"nrip_save": false,
"nrip-save": false,
"kvm_pv_unhalt": true,
"ssse3": true,
"sse4a": false,
"invpcid": true,
"pdpe1gb": true,
"tsc-deadline": true,
"fma": true,
"cx16": true,
"de": true,
"enforce": false,
"stepping": 3,
"xsave": true,
"clflush": true,
"skinit": false,
"tsc": true,
"tce": false,
"fpu": true,
"ibs": false,
"ds_cpl": false,
"ds-cpl": false,
"host-phys-bits": true,
"fma4": false,
"la57": false,
"osvw": false,
"check": true,
"hv-spinlocks": -1,
"pmu": false,
"pmm": false,
"apic": true,
"spec-ctrl": true,
"min-xlevel2": 0,
"tsc-adjust": true,
"tsc_adjust": true,
"kvm-steal-time": true,
"kvm_steal_time": true,
"kvmclock": true,
"l3-cache": true,
"lwp": false,
"ibpb": false,
"xop": false,
"avx": true,
"ospke": false,
"ace2": false,
"avx512bw": false,
"acpi": false,
"hv-vapic": false,
"fsgsbase": true,
"ht": false,
"nx": true,
"pclmulqdq": true,
"mmxext": false,
"vaes": false,
"popcnt": true,
"xsaves": false,
"tcg-cpuid": true,
"lm": true,
"umip": false,
"pse": true,
"avx2": true,
"sep": true,
"pclmuldq": true,
"virt-ssbd": false,
"x-hv-max-vps": -1,
"nodeid-msr": false,
"md-clear": true,
"kvm": true,
"misalignsse": false,
"min-xlevel": 2147483656,
"kvm-pv-unhalt": true,
"bmi2": true,
"bmi1": true,
"realized": false,
"tsc_scale": false,
"tsc-scale": false,
"topoext": false,
"hv-vpindex": false,
"xlevel2": 0,
"clflushopt": true,
"kvm-no-smi-migration": false,
"monitor": false,
"avx512er": false,
"pmm-en": false,
"pcid": true,
"3dnow": false,
"erms": true,
"lahf-lm": true,
"lahf_lm": true,
"vpclmulqdq": false,
"fxsr-opt": false,
"hv-synic": false,
"xstore": false,
"fxsr_opt": false,
"kvm-hint-dedicated": false,
"rtm": true,
"lmce": true,
"hv-time": false,
"perfctr-nb": false,
"perfctr_nb": false,
"ffxsr": false,
"rdrand": true,
"rdseed": true,
"avx512-4vnniw": false,
"vmx": false,
"vme": true,
"dtes64": false,
"mtrr": true,
"rdtscp": true,
"pse36": true,
"kvm-pv-tlb-flush": false,
"tbm": false,
"wdt": false,
"pause_filter": false,
"sha-ni": false,
"model-id": "Intel(R) Xeon(R) CPU E3-1225 v5 @ 3.30GHz",
"abm": true,
"avx512pf": false,
"xstore-en": false
}
}
},
"id": "model-expansion"
}
{
"return": [
{
"name": "max",
"typename": "max-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": false
},
{
"name": "host",
"typename": "host-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": false
},
{
"name": "base",
"typename": "base-x86_64-cpu",
"unavailable-features": [],
"static": true,
"migration-safe": true
},
{
"name": "qemu64",
"typename": "qemu64-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "qemu32",
"typename": "qemu32-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "phenom",
"typename": "phenom-x86_64-cpu",
"unavailable-features": [
"mmxext",
"fxsr-opt",
"3dnowext",
"3dnow",
"sse4a",
"npt"
],
"static": false,
"migration-safe": true
},
{
"name": "pentium3",
"typename": "pentium3-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "pentium2",
"typename": "pentium2-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "pentium",
"typename": "pentium-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "n270",
"typename": "n270-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "kvm64",
"typename": "kvm64-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "kvm32",
"typename": "kvm32-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "cpu64-rhel6",
"typename": "cpu64-rhel6-x86_64-cpu",
"unavailable-features": [
"sse4a"
],
"static": false,
"migration-safe": true
},
{
"name": "coreduo",
"typename": "coreduo-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "core2duo",
"typename": "core2duo-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "athlon",
"typename": "athlon-x86_64-cpu",
"unavailable-features": [
"mmxext",
"3dnowext",
"3dnow"
],
"static": false,
"migration-safe": true
},
{
"name": "Westmere",
"typename": "Westmere-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "Westmere-IBRS",
"typename": "Westmere-IBRS-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "Skylake-Server",
"typename": "Skylake-Server-x86_64-cpu",
"unavailable-features": [
"avx512f",
"avx512dq",
"clwb",
"avx512cd",
"avx512bw",
"avx512vl",
"avx512f",
"avx512f",
"avx512f"
],
"static": false,
"migration-safe": true
},
{
"name": "Skylake-Server-IBRS",
"typename": "Skylake-Server-IBRS-x86_64-cpu",
"unavailable-features": [
"avx512f",
"avx512dq",
"clwb",
"avx512cd",
"avx512bw",
"avx512vl",
"avx512f",
"avx512f",
"avx512f"
],
"static": false,
"migration-safe": true
},
{
"name": "Skylake-Client",
"typename": "Skylake-Client-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "Skylake-Client-IBRS",
"typename": "Skylake-Client-IBRS-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "SandyBridge",
"typename": "SandyBridge-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "SandyBridge-IBRS",
"typename": "SandyBridge-IBRS-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "Penryn",
"typename": "Penryn-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "Opteron_G5",
"typename": "Opteron_G5-x86_64-cpu",
"unavailable-features": [
"sse4a",
"misalignsse",
"xop",
"fma4",
"tbm"
],
"static": false,
"migration-safe": true
},
{
"name": "Opteron_G4",
"typename": "Opteron_G4-x86_64-cpu",
"unavailable-features": [
"sse4a",
"misalignsse",
"xop",
"fma4"
],
"static": false,
"migration-safe": true
},
{
"name": "Opteron_G3",
"typename": "Opteron_G3-x86_64-cpu",
"unavailable-features": [
"sse4a",
"misalignsse"
],
"static": false,
"migration-safe": true
},
{
"name": "Opteron_G2",
"typename": "Opteron_G2-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "Opteron_G1",
"typename": "Opteron_G1-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "Nehalem",
"typename": "Nehalem-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "Nehalem-IBRS",
"typename": "Nehalem-IBRS-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "IvyBridge",
"typename": "IvyBridge-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "IvyBridge-IBRS",
"typename": "IvyBridge-IBRS-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "Haswell",
"typename": "Haswell-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "Haswell-noTSX",
"typename": "Haswell-noTSX-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "Haswell-noTSX-IBRS",
"typename": "Haswell-noTSX-IBRS-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "Haswell-IBRS",
"typename": "Haswell-IBRS-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "EPYC",
"typename": "EPYC-x86_64-cpu",
"unavailable-features": [
"sha-ni",
"mmxext",
"fxsr-opt",
"cr8legacy",
"sse4a",
"misalignsse",
"osvw"
],
"static": false,
"migration-safe": true
},
{
"name": "EPYC-IBPB",
"typename": "EPYC-IBPB-x86_64-cpu",
"unavailable-features": [
"sha-ni",
"mmxext",
"fxsr-opt",
"cr8legacy",
"sse4a",
"misalignsse",
"osvw",
"ibpb"
],
"static": false,
"migration-safe": true
},
{
"name": "Conroe",
"typename": "Conroe-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "Broadwell",
"typename": "Broadwell-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "Broadwell-noTSX",
"typename": "Broadwell-noTSX-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "Broadwell-noTSX-IBRS",
"typename": "Broadwell-noTSX-IBRS-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "Broadwell-IBRS",
"typename": "Broadwell-IBRS-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
},
{
"name": "486",
"typename": "486-x86_64-cpu",
"unavailable-features": [],
"static": false,
"migration-safe": true
}
],
"id": "definitions"
}

View File

@@ -0,0 +1,4 @@
0506e3
family: 6 (0x06)
model: 94 (0x5e)
stepping: 3 (0x03)

View File

@@ -0,0 +1,47 @@
<!-- Intel(R) Xeon(R) CPU E3-1225 v5 @ 3.30GHz -->
<cpudata arch='x86'>
<cpuid eax_in='0x00000000' ecx_in='0x00' eax='0x00000016' ebx='0x756e6547' ecx='0x6c65746e' edx='0x49656e69'/>
<cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x000506e3' ebx='0x06100800' ecx='0x7ffafbff' edx='0xbfebfbff'/>
<cpuid eax_in='0x00000002' ecx_in='0x00' eax='0x76036301' ebx='0x00f0b6ff' ecx='0x00000000' edx='0x00c30000'/>
<cpuid eax_in='0x00000003' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x00000004' ecx_in='0x00' eax='0x1c004121' ebx='0x01c0003f' ecx='0x0000003f' edx='0x00000000'/>
<cpuid eax_in='0x00000004' ecx_in='0x01' eax='0x1c004122' ebx='0x01c0003f' ecx='0x0000003f' edx='0x00000000'/>
<cpuid eax_in='0x00000004' ecx_in='0x02' eax='0x1c004143' ebx='0x00c0003f' ecx='0x000003ff' edx='0x00000000'/>
<cpuid eax_in='0x00000004' ecx_in='0x03' eax='0x1c03c163' ebx='0x03c0003f' ecx='0x00001fff' edx='0x00000006'/>
<cpuid eax_in='0x00000005' ecx_in='0x00' eax='0x00000040' ebx='0x00000040' ecx='0x00000003' edx='0x00142120'/>
<cpuid eax_in='0x00000006' ecx_in='0x00' eax='0x000027f7' ebx='0x00000002' ecx='0x00000009' edx='0x00000000'/>
<cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x029c6fbf' ecx='0x00000000' edx='0x9c002400'/>
<cpuid eax_in='0x00000008' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x00000009' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x0000000a' ecx_in='0x00' eax='0x07300804' ebx='0x00000000' ecx='0x00000000' edx='0x00000603'/>
<cpuid eax_in='0x0000000b' ecx_in='0x00' eax='0x00000001' ebx='0x00000001' ecx='0x00000100' edx='0x00000006'/>
<cpuid eax_in='0x0000000b' ecx_in='0x01' eax='0x00000004' ebx='0x00000004' ecx='0x00000201' edx='0x00000006'/>
<cpuid eax_in='0x0000000c' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x0000000d' ecx_in='0x00' eax='0x0000001f' ebx='0x00000440' ecx='0x00000440' edx='0x00000000'/>
<cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x000003c0' ecx='0x00000100' edx='0x00000000'/>
<cpuid eax_in='0x0000000d' ecx_in='0x02' eax='0x00000100' ebx='0x00000240' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x0000000d' ecx_in='0x03' eax='0x00000040' ebx='0x000003c0' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x0000000d' ecx_in='0x04' eax='0x00000040' ebx='0x00000400' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x0000000d' ecx_in='0x08' eax='0x00000080' ebx='0x00000000' ecx='0x00000001' edx='0x00000000'/>
<cpuid eax_in='0x0000000e' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x0000000f' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x00000010' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x00000011' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x00000012' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x00000013' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x00000014' ecx_in='0x00' eax='0x00000001' ebx='0x0000000f' ecx='0x00000007' edx='0x00000000'/>
<cpuid eax_in='0x00000014' ecx_in='0x01' eax='0x02490002' ebx='0x003f3fff' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x00000015' ecx_in='0x00' eax='0x00000002' ebx='0x00000114' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x00000016' ecx_in='0x00' eax='0x00000ce4' ebx='0x00000e74' ecx='0x00000064' edx='0x00000000'/>
<cpuid eax_in='0x80000000' ecx_in='0x00' eax='0x80000008' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000121' edx='0x2c100800'/>
<cpuid eax_in='0x80000002' ecx_in='0x00' eax='0x65746e49' ebx='0x2952286c' ecx='0x6f655820' edx='0x2952286e'/>
<cpuid eax_in='0x80000003' ecx_in='0x00' eax='0x55504320' ebx='0x2d334520' ecx='0x35323231' edx='0x20357620'/>
<cpuid eax_in='0x80000004' ecx_in='0x00' eax='0x2e332040' ebx='0x48473033' ecx='0x0000007a' edx='0x00000000'/>
<cpuid eax_in='0x80000005' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x80000006' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x01006040' edx='0x00000000'/>
<cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
<cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00003027' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
<cpuid eax_in='0x80860000' ecx_in='0x00' eax='0x00000ce4' ebx='0x00000e74' ecx='0x00000064' edx='0x00000000'/>
<cpuid eax_in='0xc0000000' ecx_in='0x00' eax='0x00000ce4' ebx='0x00000e74' ecx='0x00000064' edx='0x00000000'/>
</cpudata>

View File

@@ -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, 0);
driver->qemuCapsCache = virQEMUCapsCacheNew("/dev/null", "/dev/null", 0, 0);
if (!driver->qemuCapsCache)
goto error;