Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6aad33f3cc | |||
| 5b6591ed7d | |||
| 71c382a378 | |||
| 3ac26c9827 | |||
| d8f5f4e2e9 | |||
| 7fa7c37eee | |||
| 398721ffd4 | |||
| f6736a34a2 | |||
| aa2d30880a | |||
| b6cdf32170 | |||
| a3c4cc6f3d | |||
| 90fbcbd48f | |||
| 6efd96d995 | |||
| 21316e7a45 | |||
| 8adbb7a402 | |||
| 3f19d41908 | |||
| 34da93e0c9 | |||
| 208f506190 | |||
| 0ca715cad9 | |||
| 0f5d8c1c22 | |||
| a56bcbd063 | |||
| 89c3fa751c | |||
| 051644ffcb |
+3
-8
@@ -1,8 +1,6 @@
|
||||
From 9a252992aa81b4873b22f174de9d345f4289051c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||
Date: Mon, 21 May 2018 23:05:07 +0100
|
||||
Subject: [PATCH 18/19] cpu: define the 'ssbd' CPUID feature bit
|
||||
(CVE-2018-3639)
|
||||
Subject: [PATCH] cpu: define the 'ssbd' CPUID feature bit (CVE-2018-3639)
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
@@ -19,10 +17,10 @@ Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml
|
||||
index c31e7ce36a..87301dc0ef 100644
|
||||
index 00a43b172c..245aec3309 100644
|
||||
--- a/src/cpu/cpu_map.xml
|
||||
+++ b/src/cpu/cpu_map.xml
|
||||
@@ -286,6 +286,9 @@
|
||||
@@ -298,6 +298,9 @@
|
||||
<feature name='spec-ctrl'>
|
||||
<cpuid eax_in='0x07' ecx_in='0x00' edx='0x04000000'/>
|
||||
</feature>
|
||||
@@ -32,6 +30,3 @@ index c31e7ce36a..87301dc0ef 100644
|
||||
|
||||
<!-- Processor Extended State Enumeration sub leaf 1 -->
|
||||
<feature name='xsaveopt'>
|
||||
--
|
||||
2.17.0
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
From: Stefan Berger <stefanb@linux.vnet.ibm.com>
|
||||
Date: Thu, 29 Jun 2017 14:01:11 -0400
|
||||
Subject: [PATCH] tpm: Use /dev/null for cancel path if none was found
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
TPM 2 does not implement sysfs files for cancellation of commands.
|
||||
We therefore use /dev/null for the cancel path passed to QEMU.
|
||||
|
||||
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
|
||||
Tested-by: Javier Martinez Canillas <javierm@redhat.com>
|
||||
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit dfbb15b75433e520fb1b905c1c3e28753e53e4a5)
|
||||
---
|
||||
src/util/virtpm.c | 4 +---
|
||||
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/util/virtpm.c b/src/util/virtpm.c
|
||||
index 6d9b0657a..d5c10da38 100644
|
||||
--- a/src/util/virtpm.c
|
||||
+++ b/src/util/virtpm.c
|
||||
@@ -61,9 +61,7 @@ virTPMCreateCancelPath(const char *devpath)
|
||||
VIR_FREE(path);
|
||||
}
|
||||
if (!path)
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("No usable sysfs TPM cancel file could be "
|
||||
- "found"));
|
||||
+ ignore_value(VIR_STRDUP(path, "/dev/null"));
|
||||
} else {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("TPM device path %s is invalid"), devpath);
|
||||
@@ -1,108 +0,0 @@
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Sun, 27 Aug 2017 11:23:47 -0400
|
||||
Subject: [PATCH] security: add MANAGER_MOUNT_NAMESPACE flag
|
||||
|
||||
The VIR_SECURITY_MANAGER_MOUNT_NAMESPACE flag informs the DAC driver
|
||||
if mount namespaces are in use for the VM. Will be used for future
|
||||
changes.
|
||||
|
||||
Wire it up in the qemu driver
|
||||
|
||||
(cherry picked from commit 321031e482425dfeae0f125cdac6df870f079efd)
|
||||
---
|
||||
src/qemu/qemu_driver.c | 2 ++
|
||||
src/security/security_dac.c | 10 ++++++++++
|
||||
src/security/security_dac.h | 3 +++
|
||||
src/security/security_manager.c | 4 +++-
|
||||
src/security/security_manager.h | 1 +
|
||||
5 files changed, 19 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index b7824512c..1f9264639 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -419,6 +419,8 @@ qemuSecurityInit(virQEMUDriverPtr driver)
|
||||
if (virQEMUDriverIsPrivileged(driver)) {
|
||||
if (cfg->dynamicOwnership)
|
||||
flags |= VIR_SECURITY_MANAGER_DYNAMIC_OWNERSHIP;
|
||||
+ if (virBitmapIsBitSet(cfg->namespaces, QEMU_DOMAIN_NS_MOUNT))
|
||||
+ flags |= VIR_SECURITY_MANAGER_MOUNT_NAMESPACE;
|
||||
if (!(mgr = qemuSecurityNewDAC(QEMU_DRIVER_NAME,
|
||||
cfg->user,
|
||||
cfg->group,
|
||||
diff --git a/src/security/security_dac.c b/src/security/security_dac.c
|
||||
index ca7a6af6d..507be44a2 100644
|
||||
--- a/src/security/security_dac.c
|
||||
+++ b/src/security/security_dac.c
|
||||
@@ -57,6 +57,7 @@ struct _virSecurityDACData {
|
||||
gid_t *groups;
|
||||
int ngroups;
|
||||
bool dynamicOwnership;
|
||||
+ bool mountNamespace;
|
||||
char *baselabel;
|
||||
virSecurityManagerDACChownCallback chownCallback;
|
||||
};
|
||||
@@ -237,6 +238,15 @@ virSecurityDACSetDynamicOwnership(virSecurityManagerPtr mgr,
|
||||
priv->dynamicOwnership = dynamicOwnership;
|
||||
}
|
||||
|
||||
+void
|
||||
+virSecurityDACSetMountNamespace(virSecurityManagerPtr mgr,
|
||||
+ bool mountNamespace)
|
||||
+{
|
||||
+ virSecurityDACDataPtr priv = virSecurityManagerGetPrivateData(mgr);
|
||||
+ priv->mountNamespace = mountNamespace;
|
||||
+}
|
||||
+
|
||||
+
|
||||
void
|
||||
virSecurityDACSetChownCallback(virSecurityManagerPtr mgr,
|
||||
virSecurityManagerDACChownCallback chownCallback)
|
||||
diff --git a/src/security/security_dac.h b/src/security/security_dac.h
|
||||
index 846cefbb5..97681c961 100644
|
||||
--- a/src/security/security_dac.h
|
||||
+++ b/src/security/security_dac.h
|
||||
@@ -32,6 +32,9 @@ int virSecurityDACSetUserAndGroup(virSecurityManagerPtr mgr,
|
||||
void virSecurityDACSetDynamicOwnership(virSecurityManagerPtr mgr,
|
||||
bool dynamic);
|
||||
|
||||
+void virSecurityDACSetMountNamespace(virSecurityManagerPtr mgr,
|
||||
+ bool mountNamespace);
|
||||
+
|
||||
void virSecurityDACSetChownCallback(virSecurityManagerPtr mgr,
|
||||
virSecurityManagerDACChownCallback chownCallback);
|
||||
|
||||
diff --git a/src/security/security_manager.c b/src/security/security_manager.c
|
||||
index 95b995230..e43c99d4f 100644
|
||||
--- a/src/security/security_manager.c
|
||||
+++ b/src/security/security_manager.c
|
||||
@@ -146,7 +146,8 @@ virSecurityManagerNewDAC(const char *virtDriver,
|
||||
virSecurityManagerPtr mgr;
|
||||
|
||||
virCheckFlags(VIR_SECURITY_MANAGER_NEW_MASK |
|
||||
- VIR_SECURITY_MANAGER_DYNAMIC_OWNERSHIP, NULL);
|
||||
+ VIR_SECURITY_MANAGER_DYNAMIC_OWNERSHIP |
|
||||
+ VIR_SECURITY_MANAGER_MOUNT_NAMESPACE, NULL);
|
||||
|
||||
mgr = virSecurityManagerNewDriver(&virSecurityDriverDAC,
|
||||
virtDriver,
|
||||
@@ -161,6 +162,7 @@ virSecurityManagerNewDAC(const char *virtDriver,
|
||||
}
|
||||
|
||||
virSecurityDACSetDynamicOwnership(mgr, flags & VIR_SECURITY_MANAGER_DYNAMIC_OWNERSHIP);
|
||||
+ virSecurityDACSetMountNamespace(mgr, flags & VIR_SECURITY_MANAGER_MOUNT_NAMESPACE);
|
||||
virSecurityDACSetChownCallback(mgr, chownCallback);
|
||||
|
||||
return mgr;
|
||||
diff --git a/src/security/security_manager.h b/src/security/security_manager.h
|
||||
index 01296d339..08fb89203 100644
|
||||
--- a/src/security/security_manager.h
|
||||
+++ b/src/security/security_manager.h
|
||||
@@ -36,6 +36,7 @@ typedef enum {
|
||||
VIR_SECURITY_MANAGER_REQUIRE_CONFINED = 1 << 2,
|
||||
VIR_SECURITY_MANAGER_PRIVILEGED = 1 << 3,
|
||||
VIR_SECURITY_MANAGER_DYNAMIC_OWNERSHIP = 1 << 4,
|
||||
+ VIR_SECURITY_MANAGER_MOUNT_NAMESPACE = 1 << 5,
|
||||
} virSecurityManagerNewFlags;
|
||||
|
||||
# define VIR_SECURITY_MANAGER_NEW_MASK \
|
||||
@@ -0,0 +1,65 @@
|
||||
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||
Date: Mon, 5 Mar 2018 12:46:16 +0000
|
||||
Subject: [PATCH] tests: force use of "NORMAL" TLS priority in test suite
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
When generating certificates we rely on GNUTLS' built-in default setup
|
||||
for the ciphers used in the certs. We then currently run with the distro
|
||||
specific TLS priority setup which can be much stronger, to the extent
|
||||
that the certificates we generate are considered untrustworthy. We don't
|
||||
care about the quality of the ciphers we use in the test suite, so just
|
||||
force the priority to "NORMAL" which should ensure our certs are
|
||||
accepted by GNUTLS.
|
||||
|
||||
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
---
|
||||
tests/virnettlscontexttest.c | 4 ++--
|
||||
tests/virnettlssessiontest.c | 4 ++--
|
||||
2 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/tests/virnettlscontexttest.c b/tests/virnettlscontexttest.c
|
||||
index 089c10e964..86647f3014 100644
|
||||
--- a/tests/virnettlscontexttest.c
|
||||
+++ b/tests/virnettlscontexttest.c
|
||||
@@ -72,7 +72,7 @@ static int testTLSContextInit(const void *opaque)
|
||||
data->crt,
|
||||
KEYFILE,
|
||||
NULL,
|
||||
- NULL,
|
||||
+ "NORMAL",
|
||||
true,
|
||||
true);
|
||||
} else {
|
||||
@@ -80,7 +80,7 @@ static int testTLSContextInit(const void *opaque)
|
||||
NULL,
|
||||
data->crt,
|
||||
KEYFILE,
|
||||
- NULL,
|
||||
+ "NORMAL",
|
||||
true,
|
||||
true);
|
||||
}
|
||||
diff --git a/tests/virnettlssessiontest.c b/tests/virnettlssessiontest.c
|
||||
index 6d639e5b16..7e85607181 100644
|
||||
--- a/tests/virnettlssessiontest.c
|
||||
+++ b/tests/virnettlssessiontest.c
|
||||
@@ -113,7 +113,7 @@ static int testTLSSessionInit(const void *opaque)
|
||||
data->servercrt,
|
||||
KEYFILE,
|
||||
data->wildcards,
|
||||
- NULL,
|
||||
+ "NORMAL",
|
||||
false,
|
||||
true);
|
||||
|
||||
@@ -121,7 +121,7 @@ static int testTLSSessionInit(const void *opaque)
|
||||
NULL,
|
||||
data->clientcrt,
|
||||
KEYFILE,
|
||||
- NULL,
|
||||
+ "NORMAL",
|
||||
false,
|
||||
true);
|
||||
|
||||
+4
-8
@@ -1,8 +1,6 @@
|
||||
From 7774fbbda1c886633eaf0015d6211fc0ad703bc7 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||
Date: Mon, 21 May 2018 23:05:08 +0100
|
||||
Subject: [PATCH 19/19] cpu: define the 'virt-ssbd' CPUID feature bit
|
||||
(CVE-2018-3639)
|
||||
Subject: [PATCH] cpu: define the 'virt-ssbd' CPUID feature bit (CVE-2018-3639)
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
@@ -23,15 +21,16 @@ must be manually enabled using policy=force. Guests using the
|
||||
|
||||
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit 9267342206ce17f6933d57a3128cdc504d5945c9)
|
||||
---
|
||||
src/cpu/cpu_map.xml | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml
|
||||
index 87301dc0ef..e31c9ae86c 100644
|
||||
index 245aec3309..96daa0f9af 100644
|
||||
--- a/src/cpu/cpu_map.xml
|
||||
+++ b/src/cpu/cpu_map.xml
|
||||
@@ -421,6 +421,9 @@
|
||||
@@ -433,6 +433,9 @@
|
||||
<feature name='ibpb'>
|
||||
<cpuid eax_in='0x80000008' ebx='0x00001000'/>
|
||||
</feature>
|
||||
@@ -41,6 +40,3 @@ index 87301dc0ef..e31c9ae86c 100644
|
||||
|
||||
<!-- models -->
|
||||
<model name='486'>
|
||||
--
|
||||
2.17.0
|
||||
|
||||
@@ -1,101 +0,0 @@
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Mon, 17 Jul 2017 08:57:57 -0400
|
||||
Subject: [PATCH] security: dac: relabel spice rendernode
|
||||
|
||||
For a logged in user this a path like /dev/dri/renderD128 will have
|
||||
default ownership root:video which won't work for the qemu:qemu user,
|
||||
so we need to chown it.
|
||||
|
||||
We only do this when mount namespaces are enabled in the qemu driver,
|
||||
so the chown'ing doesn't interfere with other users of the shared
|
||||
render node path
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1460804
|
||||
(cherry picked from commit 98931187eefdec6f2dea5cb82ab6d23a3ffa6634)
|
||||
---
|
||||
src/security/security_dac.c | 58 +++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 58 insertions(+)
|
||||
|
||||
diff --git a/src/security/security_dac.c b/src/security/security_dac.c
|
||||
index 507be44a2..349dbe81d 100644
|
||||
--- a/src/security/security_dac.c
|
||||
+++ b/src/security/security_dac.c
|
||||
@@ -1380,6 +1380,54 @@ virSecurityDACRestoreTPMFileLabel(virSecurityManagerPtr mgr,
|
||||
}
|
||||
|
||||
|
||||
+static int
|
||||
+virSecurityDACSetGraphicsLabel(virSecurityManagerPtr mgr,
|
||||
+ virDomainDefPtr def,
|
||||
+ virDomainGraphicsDefPtr gfx)
|
||||
+
|
||||
+{
|
||||
+ virSecurityDACDataPtr priv = virSecurityManagerGetPrivateData(mgr);
|
||||
+ virSecurityLabelDefPtr seclabel;
|
||||
+ uid_t user;
|
||||
+ gid_t group;
|
||||
+
|
||||
+ /* Skip chowning the shared render file if namespaces are disabled */
|
||||
+ if (!priv->mountNamespace)
|
||||
+ return 0;
|
||||
+
|
||||
+ seclabel = virDomainDefGetSecurityLabelDef(def, SECURITY_DAC_NAME);
|
||||
+ if (seclabel && !seclabel->relabel)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (virSecurityDACGetIds(seclabel, priv, &user, &group, NULL, NULL) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ if (gfx->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE &&
|
||||
+ gfx->data.spice.gl == VIR_TRISTATE_BOOL_YES &&
|
||||
+ gfx->data.spice.rendernode) {
|
||||
+ if (virSecurityDACSetOwnership(priv, NULL,
|
||||
+ gfx->data.spice.rendernode,
|
||||
+ user, group) < 0)
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static int
|
||||
+virSecurityDACRestoreGraphicsLabel(virSecurityManagerPtr mgr ATTRIBUTE_UNUSED,
|
||||
+ virDomainDefPtr def ATTRIBUTE_UNUSED,
|
||||
+ virDomainGraphicsDefPtr gfx ATTRIBUTE_UNUSED)
|
||||
+
|
||||
+{
|
||||
+ /* The only graphics labelling we do is dependent on mountNamespaces,
|
||||
+ in which case 'restoring' the label doesn't actually accomplish
|
||||
+ anything, so there's nothing to do here */
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int
|
||||
virSecurityDACSetInputLabel(virSecurityManagerPtr mgr,
|
||||
virDomainDefPtr def,
|
||||
@@ -1491,6 +1539,11 @@ virSecurityDACRestoreAllLabel(virSecurityManagerPtr mgr,
|
||||
rc = -1;
|
||||
}
|
||||
|
||||
+ for (i = 0; i < def->ngraphics; i++) {
|
||||
+ if (virSecurityDACRestoreGraphicsLabel(mgr, def, def->graphics[i]) < 0)
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
for (i = 0; i < def->ninputs; i++) {
|
||||
if (virSecurityDACRestoreInputLabel(mgr, def, def->inputs[i]) < 0)
|
||||
rc = -1;
|
||||
@@ -1611,6 +1664,11 @@ virSecurityDACSetAllLabel(virSecurityManagerPtr mgr,
|
||||
return -1;
|
||||
}
|
||||
|
||||
+ for (i = 0; i < def->ngraphics; i++) {
|
||||
+ if (virSecurityDACSetGraphicsLabel(mgr, def, def->graphics[i]) < 0)
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
for (i = 0; i < def->ninputs; i++) {
|
||||
if (virSecurityDACSetInputLabel(mgr, def, def->inputs[i]) < 0)
|
||||
return -1;
|
||||
@@ -0,0 +1,31 @@
|
||||
From: Jim Fehlig <jfehlig@suse.com>
|
||||
Date: Wed, 14 Mar 2018 16:42:39 -0600
|
||||
Subject: [PATCH] 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>
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
---
|
||||
src/locking/virtlockd-admin.socket.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/locking/virtlockd-admin.socket.in b/src/locking/virtlockd-admin.socket.in
|
||||
index 1fa0a3dc33..2a7500f3d0 100644
|
||||
--- a/src/locking/virtlockd-admin.socket.in
|
||||
+++ b/src/locking/virtlockd-admin.socket.in
|
||||
@@ -4,7 +4,7 @@ Before=libvirtd.service
|
||||
|
||||
[Socket]
|
||||
ListenStream=@localstatedir@/run/libvirt/virtlockd-admin-sock
|
||||
-Server=virtlockd.service
|
||||
+Service=virtlockd.service
|
||||
|
||||
[Install]
|
||||
WantedBy=sockets.target
|
||||
@@ -1,72 +0,0 @@
|
||||
From: "Daniel P. Berrange" <berrange@redhat.com>
|
||||
Date: Thu, 5 Oct 2017 17:54:28 +0100
|
||||
Subject: [PATCH] qemu: ensure TLS clients always verify the server certificate
|
||||
|
||||
The default_tls_x509_verify (and related) parameters in qemu.conf
|
||||
control whether the QEMU TLS servers request & verify certificates
|
||||
from clients. This works as a simple access control system for
|
||||
servers by requiring the CA to issue certs to permitted clients.
|
||||
This use of client certificates is disabled by default, since it
|
||||
requires extra work to issue client certificates.
|
||||
|
||||
Unfortunately the code was using this configuration parameter when
|
||||
setting up both TLS clients and servers in QEMU. The result was that
|
||||
TLS clients for character devices and disk devices had verification
|
||||
turned off, meaning they would ignore errors while validating the
|
||||
server certificate.
|
||||
|
||||
This allows for trivial MITM attacks between client and server,
|
||||
as any certificate returned by the attacker will be accepted by
|
||||
the client.
|
||||
|
||||
This is assigned CVE-2017-1000256 / LSN-2017-0002
|
||||
|
||||
Reviewed-by: Eric Blake <eblake@redhat.com>
|
||||
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
|
||||
(cherry picked from commit 441d3eb6d1be940a67ce45a286602a967601b157)
|
||||
(cherry picked from commit dc6c41798d1eb5c52c75365ffa22f7672709dfa7)
|
||||
---
|
||||
src/qemu/qemu_command.c | 2 +-
|
||||
tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-tlsx509-chardev.args | 2 +-
|
||||
.../qemuxml2argv-serial-tcp-tlsx509-secret-chardev.args | 2 +-
|
||||
3 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||
index 9a27987d4..ae78cd17e 100644
|
||||
--- a/src/qemu/qemu_command.c
|
||||
+++ b/src/qemu/qemu_command.c
|
||||
@@ -718,7 +718,7 @@ qemuBuildTLSx509BackendProps(const char *tlspath,
|
||||
if (virJSONValueObjectCreate(propsret,
|
||||
"s:dir", path,
|
||||
"s:endpoint", (isListen ? "server": "client"),
|
||||
- "b:verify-peer", verifypeer,
|
||||
+ "b:verify-peer", (isListen ? verifypeer : true),
|
||||
NULL) < 0)
|
||||
goto cleanup;
|
||||
|
||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-tlsx509-chardev.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-tlsx509-chardev.args
|
||||
index 5aff7734e..ab5f7e27f 100644
|
||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-tlsx509-chardev.args
|
||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-tlsx509-chardev.args
|
||||
@@ -26,7 +26,7 @@ server,nowait \
|
||||
localport=1111 \
|
||||
-device isa-serial,chardev=charserial0,id=serial0 \
|
||||
-object tls-creds-x509,id=objcharserial1_tls0,dir=/etc/pki/libvirt-chardev,\
|
||||
-endpoint=client,verify-peer=no \
|
||||
+endpoint=client,verify-peer=yes \
|
||||
-chardev socket,id=charserial1,host=127.0.0.1,port=5555,\
|
||||
tls-creds=objcharserial1_tls0 \
|
||||
-device isa-serial,chardev=charserial1,id=serial1 \
|
||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-tlsx509-secret-chardev.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-tlsx509-secret-chardev.args
|
||||
index 91f1fe0cd..2567abbfa 100644
|
||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-tlsx509-secret-chardev.args
|
||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-tlsx509-secret-chardev.args
|
||||
@@ -31,7 +31,7 @@ localport=1111 \
|
||||
data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
|
||||
keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
|
||||
-object tls-creds-x509,id=objcharserial1_tls0,dir=/etc/pki/libvirt-chardev,\
|
||||
-endpoint=client,verify-peer=no,passwordid=charserial1-secret0 \
|
||||
+endpoint=client,verify-peer=yes,passwordid=charserial1-secret0 \
|
||||
-chardev socket,id=charserial1,host=127.0.0.1,port=5555,\
|
||||
tls-creds=objcharserial1_tls0 \
|
||||
-device isa-serial,chardev=charserial1,id=serial1 \
|
||||
-5
@@ -1,5 +1,3 @@
|
||||
From ce5aebeacd10a1c15cb3ee46a59c8b5ff235589e Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <ce5aebeacd10a1c15cb3ee46a59c8b5ff235589e.1530632895.git.crobinso@redhat.com>
|
||||
From: Laine Stump <laine@laine.org>
|
||||
Date: Wed, 25 Apr 2018 17:12:03 -0400
|
||||
Subject: [PATCH] nwfilter: increase pcap buffer size to be compatible with
|
||||
@@ -105,6 +103,3 @@ index 6069e70460..50cfb944a2 100644
|
||||
if (pcap_set_snaplen(handle, PCAP_PBUFSIZE) < 0 ||
|
||||
pcap_set_buffer_size(handle, PCAP_BUFFERSIZE) < 0 ||
|
||||
pcap_activate(handle) < 0) {
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@@ -1,177 +0,0 @@
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Wed, 15 Nov 2017 13:15:57 +0100
|
||||
Subject: [PATCH] qemu: Move snapshot disk validation functions into one
|
||||
|
||||
Move the code so that both the new image and old image can be verified
|
||||
in the same function.
|
||||
|
||||
(cherry picked from commit 8ffdeed455650557df531aafc66c20b31bd4e0c4)
|
||||
---
|
||||
src/qemu/qemu_driver.c | 91 ++++++++++++++++++++------------------------------
|
||||
1 file changed, 36 insertions(+), 55 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 1f9264639..57f0c2bf4 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -13793,17 +13793,19 @@ qemuDomainSnapshotCreateActiveInternal(virConnectPtr conn,
|
||||
|
||||
|
||||
static int
|
||||
-qemuDomainSnapshotPrepareDiskExternalBackingInactive(virDomainDiskDefPtr disk)
|
||||
+qemuDomainSnapshotPrepareDiskExternalInactive(virDomainSnapshotDiskDefPtr snapdisk,
|
||||
+ virDomainDiskDefPtr domdisk)
|
||||
{
|
||||
- int actualType = virStorageSourceGetActualType(disk->src);
|
||||
+ int domDiskType = virStorageSourceGetActualType(domdisk->src);
|
||||
+ int snapDiskType = virStorageSourceGetActualType(snapdisk->src);
|
||||
|
||||
- switch ((virStorageType) actualType) {
|
||||
+ switch ((virStorageType) domDiskType) {
|
||||
case VIR_STORAGE_TYPE_BLOCK:
|
||||
case VIR_STORAGE_TYPE_FILE:
|
||||
- return 0;
|
||||
+ break;
|
||||
|
||||
case VIR_STORAGE_TYPE_NETWORK:
|
||||
- switch ((virStorageNetProtocol) disk->src->protocol) {
|
||||
+ switch ((virStorageNetProtocol) domdisk->src->protocol) {
|
||||
case VIR_STORAGE_NET_PROTOCOL_NONE:
|
||||
case VIR_STORAGE_NET_PROTOCOL_NBD:
|
||||
case VIR_STORAGE_NET_PROTOCOL_RBD:
|
||||
@@ -13820,7 +13822,7 @@ qemuDomainSnapshotPrepareDiskExternalBackingInactive(virDomainDiskDefPtr disk)
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("external inactive snapshots are not supported on "
|
||||
"'network' disks using '%s' protocol"),
|
||||
- virStorageNetProtocolTypeToString(disk->src->protocol));
|
||||
+ virStorageNetProtocolTypeToString(domdisk->src->protocol));
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
@@ -13831,7 +13833,23 @@ qemuDomainSnapshotPrepareDiskExternalBackingInactive(virDomainDiskDefPtr disk)
|
||||
case VIR_STORAGE_TYPE_LAST:
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("external inactive snapshots are not supported on "
|
||||
- "'%s' disks"), virStorageTypeToString(actualType));
|
||||
+ "'%s' disks"), virStorageTypeToString(domDiskType));
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ switch ((virStorageType) snapDiskType) {
|
||||
+ case VIR_STORAGE_TYPE_BLOCK:
|
||||
+ case VIR_STORAGE_TYPE_FILE:
|
||||
+ break;
|
||||
+
|
||||
+ case VIR_STORAGE_TYPE_NETWORK:
|
||||
+ case VIR_STORAGE_TYPE_DIR:
|
||||
+ case VIR_STORAGE_TYPE_VOLUME:
|
||||
+ case VIR_STORAGE_TYPE_NONE:
|
||||
+ case VIR_STORAGE_TYPE_LAST:
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
+ _("external inactive snapshots are not supported on "
|
||||
+ "'%s' disks"), virStorageTypeToString(snapDiskType));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -13840,33 +13858,27 @@ qemuDomainSnapshotPrepareDiskExternalBackingInactive(virDomainDiskDefPtr disk)
|
||||
|
||||
|
||||
static int
|
||||
-qemuDomainSnapshotPrepareDiskExternalBackingActive(virDomainDiskDefPtr disk)
|
||||
+qemuDomainSnapshotPrepareDiskExternalActive(virDomainSnapshotDiskDefPtr snapdisk,
|
||||
+ virDomainDiskDefPtr domdisk)
|
||||
{
|
||||
- if (disk->device == VIR_DOMAIN_DISK_DEVICE_LUN) {
|
||||
+ int actualType = virStorageSourceGetActualType(snapdisk->src);
|
||||
+
|
||||
+ if (domdisk->device == VIR_DOMAIN_DISK_DEVICE_LUN) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("external active snapshots are not supported on scsi "
|
||||
"passthrough devices"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-
|
||||
-static int
|
||||
-qemuDomainSnapshotPrepareDiskExternalOverlayActive(virDomainSnapshotDiskDefPtr disk)
|
||||
-{
|
||||
- int actualType = virStorageSourceGetActualType(disk->src);
|
||||
-
|
||||
switch ((virStorageType) actualType) {
|
||||
case VIR_STORAGE_TYPE_BLOCK:
|
||||
case VIR_STORAGE_TYPE_FILE:
|
||||
- return 0;
|
||||
+ break;
|
||||
|
||||
case VIR_STORAGE_TYPE_NETWORK:
|
||||
- switch ((virStorageNetProtocol) disk->src->protocol) {
|
||||
+ switch ((virStorageNetProtocol) snapdisk->src->protocol) {
|
||||
case VIR_STORAGE_NET_PROTOCOL_GLUSTER:
|
||||
- return 0;
|
||||
+ break;
|
||||
|
||||
case VIR_STORAGE_NET_PROTOCOL_NONE:
|
||||
case VIR_STORAGE_NET_PROTOCOL_NBD:
|
||||
@@ -13883,7 +13895,7 @@ qemuDomainSnapshotPrepareDiskExternalOverlayActive(virDomainSnapshotDiskDefPtr d
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("external active snapshots are not supported on "
|
||||
"'network' disks using '%s' protocol"),
|
||||
- virStorageNetProtocolTypeToString(disk->src->protocol));
|
||||
+ virStorageNetProtocolTypeToString(snapdisk->src->protocol));
|
||||
return -1;
|
||||
|
||||
}
|
||||
@@ -13903,31 +13915,6 @@ qemuDomainSnapshotPrepareDiskExternalOverlayActive(virDomainSnapshotDiskDefPtr d
|
||||
}
|
||||
|
||||
|
||||
-static int
|
||||
-qemuDomainSnapshotPrepareDiskExternalOverlayInactive(virDomainSnapshotDiskDefPtr disk)
|
||||
-{
|
||||
- int actualType = virStorageSourceGetActualType(disk->src);
|
||||
-
|
||||
- switch ((virStorageType) actualType) {
|
||||
- case VIR_STORAGE_TYPE_BLOCK:
|
||||
- case VIR_STORAGE_TYPE_FILE:
|
||||
- return 0;
|
||||
-
|
||||
- case VIR_STORAGE_TYPE_NETWORK:
|
||||
- case VIR_STORAGE_TYPE_DIR:
|
||||
- case VIR_STORAGE_TYPE_VOLUME:
|
||||
- case VIR_STORAGE_TYPE_NONE:
|
||||
- case VIR_STORAGE_TYPE_LAST:
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- _("external inactive snapshots are not supported on "
|
||||
- "'%s' disks"), virStorageTypeToString(actualType));
|
||||
- return -1;
|
||||
- }
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-
|
||||
static int
|
||||
qemuDomainSnapshotPrepareDiskExternal(virConnectPtr conn,
|
||||
virDomainDiskDefPtr disk,
|
||||
@@ -13945,16 +13932,10 @@ qemuDomainSnapshotPrepareDiskExternal(virConnectPtr conn,
|
||||
if (virStorageTranslateDiskSourcePool(conn, disk) < 0)
|
||||
return -1;
|
||||
|
||||
- if (qemuDomainSnapshotPrepareDiskExternalBackingInactive(disk) < 0)
|
||||
- return -1;
|
||||
-
|
||||
- if (qemuDomainSnapshotPrepareDiskExternalOverlayInactive(snapdisk) < 0)
|
||||
+ if (qemuDomainSnapshotPrepareDiskExternalInactive(snapdisk, disk) < 0)
|
||||
return -1;
|
||||
} else {
|
||||
- if (qemuDomainSnapshotPrepareDiskExternalBackingActive(disk) < 0)
|
||||
- return -1;
|
||||
-
|
||||
- if (qemuDomainSnapshotPrepareDiskExternalOverlayActive(snapdisk) < 0)
|
||||
+ if (qemuDomainSnapshotPrepareDiskExternalActive(snapdisk, disk) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Tue, 14 Nov 2017 15:34:46 +0100
|
||||
Subject: [PATCH] qemu: block: Add function to check if storage source allows
|
||||
concurrent access
|
||||
|
||||
Storage source format backing a shared device (e.g. running a cluster
|
||||
filesystem) needs to support the sharing so that metadata are not
|
||||
corrupted. Add a central function for checking this.
|
||||
|
||||
(cherry picked from commit 1fc3cd8731640aefc48bbd9fc489f21cb99c6f67)
|
||||
---
|
||||
src/qemu/qemu_block.c | 15 +++++++++++++++
|
||||
src/qemu/qemu_block.h | 3 +++
|
||||
2 files changed, 18 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
|
||||
index 7fb12ea5a..4c0a5eb78 100644
|
||||
--- a/src/qemu/qemu_block.c
|
||||
+++ b/src/qemu/qemu_block.c
|
||||
@@ -379,6 +379,21 @@ qemuBlockGetNodeData(virJSONValuePtr data)
|
||||
}
|
||||
|
||||
|
||||
+/**
|
||||
+ * qemuBlockStorageSourceSupportsConcurrentAccess:
|
||||
+ * @src: disk storage source
|
||||
+ *
|
||||
+ * Returns true if the given storage format supports concurrent access from two
|
||||
+ * separate processes.
|
||||
+ */
|
||||
+bool
|
||||
+qemuBlockStorageSourceSupportsConcurrentAccess(virStorageSourcePtr src)
|
||||
+{
|
||||
+ /* no need to check in backing chain since only RAW storage supports this */
|
||||
+ return src->format == VIR_STORAGE_FILE_RAW;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/**
|
||||
* qemuBlockStorageSourceBuildHostsJSONSocketAddress:
|
||||
* @src: disk storage source
|
||||
diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h
|
||||
index f0a2c9aa7..ebf3149ce 100644
|
||||
--- a/src/qemu/qemu_block.h
|
||||
+++ b/src/qemu/qemu_block.h
|
||||
@@ -53,6 +53,9 @@ qemuBlockNodeNamesDetect(virQEMUDriverPtr driver,
|
||||
virHashTablePtr
|
||||
qemuBlockGetNodeData(virJSONValuePtr data);
|
||||
|
||||
+bool
|
||||
+qemuBlockStorageSourceSupportsConcurrentAccess(virStorageSourcePtr src);
|
||||
+
|
||||
virJSONValuePtr
|
||||
qemuBlockStorageSourceGetBackendProps(virStorageSourcePtr src);
|
||||
|
||||
@@ -0,0 +1,253 @@
|
||||
From: Vincent Bernat <vincent@bernat.im>
|
||||
Date: Tue, 10 Apr 2018 08:27:15 +0200
|
||||
Subject: [PATCH] util: don't check for parallel iteration in hash-related
|
||||
functions
|
||||
|
||||
This is the responsability of the caller to apply the correct lock
|
||||
before using these functions. Moreover, the use of a simple boolean
|
||||
was still racy: two threads may check the boolean and "lock" it
|
||||
simultaneously.
|
||||
|
||||
Users of functions from src/util/virhash.c have to be checked for
|
||||
correctness. Lookups and iteration should hold a RO
|
||||
lock. Modifications should hold a RW lock.
|
||||
|
||||
Most important uses seem to be covered. Callers have now a greater
|
||||
responsability, notably the ability to execute some operations while
|
||||
iterating were reliably forbidden before are now accepted.
|
||||
|
||||
Signed-off-by: Vincent Bernat <vincent@bernat.im>
|
||||
(cherry picked from commit 4d7384eb9ddef2008cb0cc165eb808f74bc83d6b)
|
||||
---
|
||||
src/util/virhash.c | 37 --------------------
|
||||
tests/virhashtest.c | 83 ---------------------------------------------
|
||||
2 files changed, 120 deletions(-)
|
||||
|
||||
diff --git a/src/util/virhash.c b/src/util/virhash.c
|
||||
index 0ffbfcce2c..475c2b0281 100644
|
||||
--- a/src/util/virhash.c
|
||||
+++ b/src/util/virhash.c
|
||||
@@ -41,12 +41,6 @@ VIR_LOG_INIT("util.hash");
|
||||
|
||||
/* #define DEBUG_GROW */
|
||||
|
||||
-#define virHashIterationError(ret) \
|
||||
- do { \
|
||||
- VIR_ERROR(_("Hash operation not allowed during iteration")); \
|
||||
- return ret; \
|
||||
- } while (0)
|
||||
-
|
||||
/*
|
||||
* A single entry in the hash table
|
||||
*/
|
||||
@@ -66,10 +60,6 @@ struct _virHashTable {
|
||||
uint32_t seed;
|
||||
size_t size;
|
||||
size_t nbElems;
|
||||
- /* True iff we are iterating over hash entries. */
|
||||
- bool iterating;
|
||||
- /* Pointer to the current entry during iteration. */
|
||||
- virHashEntryPtr current;
|
||||
virHashDataFree dataFree;
|
||||
virHashKeyCode keyCode;
|
||||
virHashKeyEqual keyEqual;
|
||||
@@ -339,9 +329,6 @@ virHashAddOrUpdateEntry(virHashTablePtr table, const void *name,
|
||||
if ((table == NULL) || (name == NULL))
|
||||
return -1;
|
||||
|
||||
- if (table->iterating)
|
||||
- virHashIterationError(-1);
|
||||
-
|
||||
key = virHashComputeKey(table, name);
|
||||
|
||||
/* Check for duplicate entry */
|
||||
@@ -551,9 +538,6 @@ virHashRemoveEntry(virHashTablePtr table, const void *name)
|
||||
nextptr = table->table + virHashComputeKey(table, name);
|
||||
for (entry = *nextptr; entry; entry = entry->next) {
|
||||
if (table->keyEqual(entry->name, name)) {
|
||||
- if (table->iterating && table->current != entry)
|
||||
- virHashIterationError(-1);
|
||||
-
|
||||
if (table->dataFree)
|
||||
table->dataFree(entry->payload, entry->name);
|
||||
if (table->keyFree)
|
||||
@@ -593,18 +577,11 @@ virHashForEach(virHashTablePtr table, virHashIterator iter, void *data)
|
||||
if (table == NULL || iter == NULL)
|
||||
return -1;
|
||||
|
||||
- if (table->iterating)
|
||||
- virHashIterationError(-1);
|
||||
-
|
||||
- table->iterating = true;
|
||||
- table->current = NULL;
|
||||
for (i = 0; i < table->size; i++) {
|
||||
virHashEntryPtr entry = table->table[i];
|
||||
while (entry) {
|
||||
virHashEntryPtr next = entry->next;
|
||||
- table->current = entry;
|
||||
ret = iter(entry->payload, entry->name, data);
|
||||
- table->current = NULL;
|
||||
|
||||
if (ret < 0)
|
||||
goto cleanup;
|
||||
@@ -615,7 +592,6 @@ virHashForEach(virHashTablePtr table, virHashIterator iter, void *data)
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
- table->iterating = false;
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -643,11 +619,6 @@ virHashRemoveSet(virHashTablePtr table,
|
||||
if (table == NULL || iter == NULL)
|
||||
return -1;
|
||||
|
||||
- if (table->iterating)
|
||||
- virHashIterationError(-1);
|
||||
-
|
||||
- table->iterating = true;
|
||||
- table->current = NULL;
|
||||
for (i = 0; i < table->size; i++) {
|
||||
virHashEntryPtr *nextptr = table->table + i;
|
||||
|
||||
@@ -667,7 +638,6 @@ virHashRemoveSet(virHashTablePtr table,
|
||||
}
|
||||
}
|
||||
}
|
||||
- table->iterating = false;
|
||||
|
||||
return count;
|
||||
}
|
||||
@@ -723,23 +693,16 @@ void *virHashSearch(const virHashTable *ctable,
|
||||
if (table == NULL || iter == NULL)
|
||||
return NULL;
|
||||
|
||||
- if (table->iterating)
|
||||
- virHashIterationError(NULL);
|
||||
-
|
||||
- table->iterating = true;
|
||||
- table->current = NULL;
|
||||
for (i = 0; i < table->size; i++) {
|
||||
virHashEntryPtr entry;
|
||||
for (entry = table->table[i]; entry; entry = entry->next) {
|
||||
if (iter(entry->payload, entry->name, data)) {
|
||||
- table->iterating = false;
|
||||
if (name)
|
||||
*name = table->keyCopy(entry->name);
|
||||
return entry->payload;
|
||||
}
|
||||
}
|
||||
}
|
||||
- table->iterating = false;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
diff --git a/tests/virhashtest.c b/tests/virhashtest.c
|
||||
index 3b85b62c30..e9c03c1afb 100644
|
||||
--- a/tests/virhashtest.c
|
||||
+++ b/tests/virhashtest.c
|
||||
@@ -221,32 +221,6 @@ testHashRemoveForEachAll(void *payload ATTRIBUTE_UNUSED,
|
||||
}
|
||||
|
||||
|
||||
-const int testHashCountRemoveForEachForbidden = ARRAY_CARDINALITY(uuids);
|
||||
-
|
||||
-static int
|
||||
-testHashRemoveForEachForbidden(void *payload ATTRIBUTE_UNUSED,
|
||||
- const void *name,
|
||||
- void *data)
|
||||
-{
|
||||
- virHashTablePtr hash = data;
|
||||
- size_t i;
|
||||
-
|
||||
- for (i = 0; i < ARRAY_CARDINALITY(uuids_subset); i++) {
|
||||
- if (STREQ(uuids_subset[i], name)) {
|
||||
- int next = (i + 1) % ARRAY_CARDINALITY(uuids_subset);
|
||||
-
|
||||
- if (virHashRemoveEntry(hash, uuids_subset[next]) == 0) {
|
||||
- VIR_TEST_VERBOSE(
|
||||
- "\nentry \"%s\" should not be allowed to be removed",
|
||||
- uuids_subset[next]);
|
||||
- }
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-
|
||||
static int
|
||||
testHashRemoveForEach(const void *data)
|
||||
{
|
||||
@@ -303,61 +277,6 @@ testHashSteal(const void *data ATTRIBUTE_UNUSED)
|
||||
}
|
||||
|
||||
|
||||
-static int
|
||||
-testHashIter(void *payload ATTRIBUTE_UNUSED,
|
||||
- const void *name ATTRIBUTE_UNUSED,
|
||||
- void *data ATTRIBUTE_UNUSED)
|
||||
-{
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static int
|
||||
-testHashForEachIter(void *payload ATTRIBUTE_UNUSED,
|
||||
- const void *name ATTRIBUTE_UNUSED,
|
||||
- void *data)
|
||||
-{
|
||||
- virHashTablePtr hash = data;
|
||||
-
|
||||
- if (virHashAddEntry(hash, uuids_new[0], NULL) == 0)
|
||||
- VIR_TEST_VERBOSE("\nadding entries in ForEach should be forbidden");
|
||||
-
|
||||
- if (virHashUpdateEntry(hash, uuids_new[0], NULL) == 0)
|
||||
- VIR_TEST_VERBOSE("\nupdating entries in ForEach should be forbidden");
|
||||
-
|
||||
- if (virHashSteal(hash, uuids_new[0]) != NULL)
|
||||
- VIR_TEST_VERBOSE("\nstealing entries in ForEach should be forbidden");
|
||||
-
|
||||
- if (virHashSteal(hash, uuids_new[0]) != NULL)
|
||||
- VIR_TEST_VERBOSE("\nstealing entries in ForEach should be forbidden");
|
||||
-
|
||||
- if (virHashForEach(hash, testHashIter, NULL) >= 0)
|
||||
- VIR_TEST_VERBOSE("\niterating through hash in ForEach"
|
||||
- " should be forbidden");
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static int
|
||||
-testHashForEach(const void *data ATTRIBUTE_UNUSED)
|
||||
-{
|
||||
- virHashTablePtr hash;
|
||||
- int ret = -1;
|
||||
-
|
||||
- if (!(hash = testHashInit(0)))
|
||||
- return -1;
|
||||
-
|
||||
- if (virHashForEach(hash, testHashForEachIter, hash)) {
|
||||
- VIR_TEST_VERBOSE("\nvirHashForEach didn't go through all entries");
|
||||
- goto cleanup;
|
||||
- }
|
||||
-
|
||||
- ret = 0;
|
||||
-
|
||||
- cleanup:
|
||||
- virHashFree(hash);
|
||||
- return ret;
|
||||
-}
|
||||
-
|
||||
-
|
||||
static int
|
||||
testHashRemoveSetIter(const void *payload ATTRIBUTE_UNUSED,
|
||||
const void *name,
|
||||
@@ -628,9 +547,7 @@ mymain(void)
|
||||
DO_TEST("Remove", Remove);
|
||||
DO_TEST_DATA("Remove in ForEach", RemoveForEach, Some);
|
||||
DO_TEST_DATA("Remove in ForEach", RemoveForEach, All);
|
||||
- DO_TEST_DATA("Remove in ForEach", RemoveForEach, Forbidden);
|
||||
DO_TEST("Steal", Steal);
|
||||
- DO_TEST("Forbidden ops in ForEach", ForEach);
|
||||
DO_TEST("RemoveSet", RemoveSet);
|
||||
DO_TEST("Search", Search);
|
||||
DO_TEST("GetItems", GetItems);
|
||||
@@ -0,0 +1,64 @@
|
||||
From: Matthias Bolte <matthias.bolte@googlemail.com>
|
||||
Date: Thu, 2 Aug 2018 17:33:37 +0200
|
||||
Subject: [PATCH] esx: Fix double-free and freeing static strings in
|
||||
esxDomainSetAutostart
|
||||
|
||||
Since commit ae83e02f3dd7fe99fed5d8159a35b666fafeafd5#l3393 the
|
||||
newPowerInfo pointer itself is used to track the ownership of the
|
||||
AutoStartPowerInfo object to make Coverity understand the code better.
|
||||
This broke the code that unset some members of the AutoStartPowerInfo
|
||||
object that should not be freed the normal way.
|
||||
|
||||
Instead, transfer ownership of the AutoStartPowerInfo object to the
|
||||
HostAutoStartManagerConfig object before filling in the values that
|
||||
need special handling. This allows to free the AutoStartPowerInfo
|
||||
directly without having to deal with the special values, or to let
|
||||
the old (now restored) logic handle the special values again.
|
||||
|
||||
Signed-off-by: Matthias Bolte <matthias.bolte@googlemail.com>
|
||||
Tested-by: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
|
||||
Reviewed-by: John Ferlan <jferlan@redhat.com>
|
||||
(cherry picked from commit 3ad77f853230f870efa396636e008292c7f2b1c0)
|
||||
---
|
||||
src/esx/esx_driver.c | 14 ++++----------
|
||||
1 file changed, 4 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
|
||||
index b065cdc513..9a7006c6e5 100644
|
||||
--- a/src/esx/esx_driver.c
|
||||
+++ b/src/esx/esx_driver.c
|
||||
@@ -3422,7 +3422,10 @@ esxDomainSetAutostart(virDomainPtr domain, int autostart)
|
||||
if (esxVI_AutoStartPowerInfo_Alloc(&newPowerInfo) < 0 ||
|
||||
esxVI_Int_Alloc(&newPowerInfo->startOrder) < 0 ||
|
||||
esxVI_Int_Alloc(&newPowerInfo->startDelay) < 0 ||
|
||||
- esxVI_Int_Alloc(&newPowerInfo->stopDelay) < 0) {
|
||||
+ esxVI_Int_Alloc(&newPowerInfo->stopDelay) < 0 ||
|
||||
+ esxVI_AutoStartPowerInfo_AppendToList(&spec->powerInfo,
|
||||
+ newPowerInfo) < 0) {
|
||||
+ esxVI_AutoStartPowerInfo_Free(&newPowerInfo);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
@@ -3434,13 +3437,6 @@ esxDomainSetAutostart(virDomainPtr domain, int autostart)
|
||||
newPowerInfo->stopDelay->value = -1; /* use system default */
|
||||
newPowerInfo->stopAction = (char *)"none";
|
||||
|
||||
- if (esxVI_AutoStartPowerInfo_AppendToList(&spec->powerInfo,
|
||||
- newPowerInfo) < 0) {
|
||||
- goto cleanup;
|
||||
- }
|
||||
-
|
||||
- newPowerInfo = NULL;
|
||||
-
|
||||
if (esxVI_ReconfigureAutostart
|
||||
(priv->primary,
|
||||
priv->primary->hostSystem->configManager->autoStartManager,
|
||||
@@ -3462,8 +3458,6 @@ esxDomainSetAutostart(virDomainPtr domain, int autostart)
|
||||
esxVI_AutoStartDefaults_Free(&defaults);
|
||||
esxVI_AutoStartPowerInfo_Free(&powerInfoList);
|
||||
|
||||
- esxVI_AutoStartPowerInfo_Free(&newPowerInfo);
|
||||
-
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1,146 +0,0 @@
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Tue, 14 Nov 2017 15:37:09 +0100
|
||||
Subject: [PATCH] qemu: domain: Reject shared disk access if backing format
|
||||
does not support it
|
||||
|
||||
Disk sharing between two VMs may corrupt the images if the format driver
|
||||
does not support it. Check that the user declared use of a supported
|
||||
storage format when they want to share the disk.
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1511480
|
||||
(cherry picked from commit 3b03a27cd00c2f032661d2bf8905795425752fc7)
|
||||
---
|
||||
src/qemu/qemu_domain.c | 29 +++++++++++++++++++++-
|
||||
.../qemuxml2argv-disk-drive-shared-qcow.xml | 28 +++++++++++++++++++++
|
||||
.../qemuxml2argv-disk-drive-shared.args | 2 +-
|
||||
.../qemuxml2argv-disk-drive-shared.xml | 2 +-
|
||||
tests/qemuxml2argvtest.c | 1 +
|
||||
5 files changed, 59 insertions(+), 3 deletions(-)
|
||||
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-qcow.xml
|
||||
|
||||
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||
index b98ffffae..42d17c1b0 100644
|
||||
--- a/src/qemu/qemu_domain.c
|
||||
+++ b/src/qemu/qemu_domain.c
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
#include "qemu_domain.h"
|
||||
#include "qemu_alias.h"
|
||||
+#include "qemu_block.h"
|
||||
#include "qemu_cgroup.h"
|
||||
#include "qemu_command.h"
|
||||
#include "qemu_process.h"
|
||||
@@ -3299,6 +3300,29 @@ qemuDomainRedirdevDefValidate(const virDomainRedirdevDef *def)
|
||||
}
|
||||
|
||||
|
||||
+static int
|
||||
+qemuDomainDeviceDefValidateDisk(const virDomainDiskDef *disk)
|
||||
+{
|
||||
+ if (disk->src->shared && !disk->src->readonly) {
|
||||
+ if (disk->src->format <= VIR_STORAGE_FILE_AUTO) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("shared access for disk '%s' requires use of "
|
||||
+ "explicitly specified disk format"), disk->dst);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (!qemuBlockStorageSourceSupportsConcurrentAccess(disk->src)) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("shared access for disk '%s' requires use of "
|
||||
+ "supported storage format"), disk->dst);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int
|
||||
qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev,
|
||||
const virDomainDef *def ATTRIBUTE_UNUSED,
|
||||
@@ -3308,7 +3332,10 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev,
|
||||
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
||||
int ret = -1;
|
||||
|
||||
- if (dev->type == VIR_DOMAIN_DEVICE_NET) {
|
||||
+ if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
|
||||
+ if (qemuDomainDeviceDefValidateDisk(dev->data.disk) < 0)
|
||||
+ goto cleanup;
|
||||
+ } else if (dev->type == VIR_DOMAIN_DEVICE_NET) {
|
||||
const virDomainNetDef *net = dev->data.net;
|
||||
|
||||
if (net->guestIP.nroutes || net->guestIP.nips) {
|
||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-qcow.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-qcow.xml
|
||||
new file mode 100644
|
||||
index 000000000..ca88a944b
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-qcow.xml
|
||||
@@ -0,0 +1,28 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219136</memory>
|
||||
+ <currentMemory unit='KiB'>219136</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='i686' machine='pc'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-i686</emulator>
|
||||
+ <disk type='block' device='disk'>
|
||||
+ <driver name='qemu' type='qcow2'/>
|
||||
+ <source dev='/dev/HostVG/QEMUGuest1'/>
|
||||
+ <target dev='hda' bus='ide'/>
|
||||
+ <shareable/>
|
||||
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||
+ </disk>
|
||||
+ <controller type='usb' index='0'/>
|
||||
+ <controller type='ide' index='0'/>
|
||||
+ <memballoon model='virtio'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared.args
|
||||
index 502157bf8..326fde1b3 100644
|
||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared.args
|
||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared.args
|
||||
@@ -19,7 +19,7 @@ server,nowait \
|
||||
-no-acpi \
|
||||
-boot c \
|
||||
-usb \
|
||||
--drive file=/dev/HostVG/QEMUGuest1,format=qcow2,if=none,id=drive-ide0-0-0,\
|
||||
+-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0,\
|
||||
serial=XYZXYZXYZYXXYZYZYXYZY,cache=none \
|
||||
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
|
||||
-drive file=/dev/HostVG/QEMUGuest2,format=raw,if=none,media=cdrom,\
|
||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared.xml
|
||||
index 9f7472378..677c2b0b7 100644
|
||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared.xml
|
||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared.xml
|
||||
@@ -15,7 +15,7 @@
|
||||
<devices>
|
||||
<emulator>/usr/bin/qemu-system-i686</emulator>
|
||||
<disk type='block' device='disk'>
|
||||
- <driver name='qemu' type='qcow2'/>
|
||||
+ <driver name='qemu' type='raw'/>
|
||||
<source dev='/dev/HostVG/QEMUGuest1'/>
|
||||
<target dev='hda' bus='ide'/>
|
||||
<shareable/>
|
||||
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
|
||||
index 18f06e5aa..93f892229 100644
|
||||
--- a/tests/qemuxml2argvtest.c
|
||||
+++ b/tests/qemuxml2argvtest.c
|
||||
@@ -895,6 +895,7 @@ mymain(void)
|
||||
QEMU_CAPS_DRIVE_BOOT);
|
||||
DO_TEST("disk-drive-shared",
|
||||
QEMU_CAPS_DRIVE_SERIAL);
|
||||
+ DO_TEST_PARSE_ERROR("disk-drive-shared-qcow", NONE);
|
||||
DO_TEST("disk-drive-error-policy-stop",
|
||||
QEMU_CAPS_MONITOR_JSON);
|
||||
DO_TEST("disk-drive-error-policy-enospace",
|
||||
@@ -0,0 +1,55 @@
|
||||
From 8d6ab7976fa691763fc05a154f2bab865d435b00 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Fri, 5 Apr 2019 11:33:32 +0200
|
||||
Subject: [PATCH 1/4] cpu_x86: Do not cache microcode version
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
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 be46f613261d3b655a1f15afd635087e68a9c39b)
|
||||
---
|
||||
src/cpu/cpu_x86.c | 5 +----
|
||||
1 file changed, 1 insertion(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index b2398c5ad2..38cab15c59 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -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);
|
||||
--
|
||||
2.21.0
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Wed, 15 Nov 2017 13:41:01 +0100
|
||||
Subject: [PATCH] qemu: snapshot: Disallow snapshot of unsupported shared disks
|
||||
|
||||
Creating a snapshot would introduce a possibly unsupported member for
|
||||
sharing into the backing chain. Add a check to prevent that from
|
||||
happening.
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1511480
|
||||
(cherry picked from commit 9b2fbfa6f6b535b9f41a7503531d43d86d7a8868)
|
||||
---
|
||||
src/qemu/qemu_driver.c | 24 ++++++++++++++++++++++++
|
||||
1 file changed, 24 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 57f0c2bf4..91119a494 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -13792,6 +13792,24 @@ qemuDomainSnapshotCreateActiveInternal(virConnectPtr conn,
|
||||
}
|
||||
|
||||
|
||||
+static int
|
||||
+qemuDomainSnapshotPrepareDiskShared(virDomainSnapshotDiskDefPtr snapdisk,
|
||||
+ virDomainDiskDefPtr domdisk)
|
||||
+{
|
||||
+ if (!domdisk->src->shared || domdisk->src->readonly)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (!qemuBlockStorageSourceSupportsConcurrentAccess(snapdisk->src)) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("shared access for disk '%s' requires use of "
|
||||
+ "supported storage format"), domdisk->dst);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int
|
||||
qemuDomainSnapshotPrepareDiskExternalInactive(virDomainSnapshotDiskDefPtr snapdisk,
|
||||
virDomainDiskDefPtr domdisk)
|
||||
@@ -13853,6 +13871,9 @@ qemuDomainSnapshotPrepareDiskExternalInactive(virDomainSnapshotDiskDefPtr snapdi
|
||||
return -1;
|
||||
}
|
||||
|
||||
+ if (qemuDomainSnapshotPrepareDiskShared(snapdisk, domdisk) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -13911,6 +13932,9 @@ qemuDomainSnapshotPrepareDiskExternalActive(virDomainSnapshotDiskDefPtr snapdisk
|
||||
return -1;
|
||||
}
|
||||
|
||||
+ if (qemuDomainSnapshotPrepareDiskShared(snapdisk, domdisk) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Wed, 15 Nov 2017 14:33:11 +0100
|
||||
Subject: [PATCH] qemu: Disallow pivot of shared disks to unsupported storage
|
||||
|
||||
Pivoting to a unsupported storage type might break the assumption that
|
||||
shared disks will not corrupt metadata.
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1511480
|
||||
(cherry picked from commit 2b41c86294786c07f53afa633fe3dce703debc3c)
|
||||
---
|
||||
src/qemu/qemu_driver.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 91119a494..208ccc9bc 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -16325,6 +16325,16 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
+ /* When pivoting to a shareable disk we need to make sure that the disk can
|
||||
+ * be safely shared, since block copy might have changed the format. */
|
||||
+ if (disk->src->shared && !disk->src->readonly &&
|
||||
+ !qemuBlockStorageSourceSupportsConcurrentAccess(disk->mirror)) {
|
||||
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||
+ _("can't pivot a shared disk to a storage volume not "
|
||||
+ "supporting sharing"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+
|
||||
/* For active commit, the mirror is part of the already labeled
|
||||
* chain. For blockcopy, we previously labeled only the top-level
|
||||
* image; but if the user is reusing an external image that
|
||||
@@ -0,0 +1,155 @@
|
||||
From cb6bcb0312a33a0b6a48d0ee1f368c9080e4a13d Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Fri, 12 Apr 2019 21:21:05 +0200
|
||||
Subject: [PATCH 2/4] qemu: Don't cache microcode version
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
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 673c62a3b7855a0685d8f116e227c402720b9ee9)
|
||||
|
||||
CVE-2018-12126, CVE-2018-12127, CVE-2018-12130
|
||||
|
||||
Conflicts:
|
||||
src/qemu/qemu_capabilities.c
|
||||
- virQEMUCapsCacheLookupByArch refactoring (commits
|
||||
7948ad4129a and 1a3de67001c) are missing
|
||||
- commit a7424faff0f "Force QMP capability probing" is
|
||||
missing downstream
|
||||
|
||||
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_capabilities.c | 12 ++++++++----
|
||||
src/qemu/qemu_capabilities.h | 3 +--
|
||||
src/qemu/qemu_driver.c | 9 +--------
|
||||
tests/testutilsqemu.c | 2 +-
|
||||
4 files changed, 11 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
|
||||
index b5eb8cf46a..17eb6579bf 100644
|
||||
--- a/src/qemu/qemu_capabilities.c
|
||||
+++ b/src/qemu/qemu_capabilities.c
|
||||
@@ -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
|
||||
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
|
||||
index c2ec2be193..7fd51f5fa0 100644
|
||||
--- a/src/qemu/qemu_capabilities.h
|
||||
+++ b/src/qemu/qemu_capabilities.h
|
||||
@@ -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,
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 96454c17c0..bb38904090 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -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;
|
||||
|
||||
diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
|
||||
index f8182033fc..2c7124bf26 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, 0);
|
||||
+ driver->qemuCapsCache = virQEMUCapsCacheNew("/dev/null", "/dev/null", 0, 0);
|
||||
if (!driver->qemuCapsCache)
|
||||
goto error;
|
||||
|
||||
--
|
||||
2.21.0
|
||||
|
||||
@@ -0,0 +1,886 @@
|
||||
From 36151b10d3e1f8f92f4ad6b8200ce5355b7f96f0 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Fri, 5 Apr 2019 11:19:30 +0200
|
||||
Subject: [PATCH 3/4] cputest: Add data for Intel(R) Xeon(R) CPU E3-1225 v5
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit 5cd9db3ac11e88846cbcf95fad9f6fae9d880dee)
|
||||
|
||||
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>
|
||||
---
|
||||
tests/cputest.c | 1 +
|
||||
.../x86_64-cpuid-Xeon-E3-1225-v5-disabled.xml | 7 +
|
||||
.../x86_64-cpuid-Xeon-E3-1225-v5-enabled.xml | 8 +
|
||||
.../x86_64-cpuid-Xeon-E3-1225-v5-guest.xml | 27 +
|
||||
.../x86_64-cpuid-Xeon-E3-1225-v5-host.xml | 28 +
|
||||
.../x86_64-cpuid-Xeon-E3-1225-v5-json.xml | 11 +
|
||||
.../x86_64-cpuid-Xeon-E3-1225-v5.json | 652 ++++++++++++++++++
|
||||
.../x86_64-cpuid-Xeon-E3-1225-v5.sig | 4 +
|
||||
.../x86_64-cpuid-Xeon-E3-1225-v5.xml | 47 ++
|
||||
9 files changed, 785 insertions(+)
|
||||
create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-disabled.xml
|
||||
create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-enabled.xml
|
||||
create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-guest.xml
|
||||
create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-host.xml
|
||||
create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-json.xml
|
||||
create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5.json
|
||||
create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5.sig
|
||||
create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5.xml
|
||||
|
||||
diff --git a/tests/cputest.c b/tests/cputest.c
|
||||
index 1e79edbef7..2df1d28e39 100644
|
||||
--- a/tests/cputest.c
|
||||
+++ b/tests/cputest.c
|
||||
@@ -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);
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-disabled.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-disabled.xml
|
||||
new file mode 100644
|
||||
index 0000000000..ce51903e53
|
||||
--- /dev/null
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-disabled.xml
|
||||
@@ -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>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-enabled.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-enabled.xml
|
||||
new file mode 100644
|
||||
index 0000000000..0deca9fba6
|
||||
--- /dev/null
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-enabled.xml
|
||||
@@ -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='0x8c000000'/>
|
||||
+ <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>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-guest.xml
|
||||
new file mode 100644
|
||||
index 0000000000..141c01c841
|
||||
--- /dev/null
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-guest.xml
|
||||
@@ -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='stibp'/>
|
||||
+ <feature policy='require' name='ssbd'/>
|
||||
+ <feature policy='require' name='xsaves'/>
|
||||
+ <feature policy='require' name='pdpe1gb'/>
|
||||
+ <feature policy='require' name='invtsc'/>
|
||||
+</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-host.xml
|
||||
new file mode 100644
|
||||
index 0000000000..53bfc9728d
|
||||
--- /dev/null
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-host.xml
|
||||
@@ -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='stibp'/>
|
||||
+ <feature name='ssbd'/>
|
||||
+ <feature name='xsaves'/>
|
||||
+ <feature name='pdpe1gb'/>
|
||||
+ <feature name='invtsc'/>
|
||||
+</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-json.xml
|
||||
new file mode 100644
|
||||
index 0000000000..1f321db273
|
||||
--- /dev/null
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-json.xml
|
||||
@@ -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='stibp'/>
|
||||
+ <feature policy='require' name='ssbd'/>
|
||||
+ <feature policy='require' name='pdpe1gb'/>
|
||||
+</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5.json b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5.json
|
||||
new file mode 100644
|
||||
index 0000000000..084747556b
|
||||
--- /dev/null
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5.json
|
||||
@@ -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"
|
||||
+}
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5.sig b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5.sig
|
||||
new file mode 100644
|
||||
index 0000000000..7e57c2ded6
|
||||
--- /dev/null
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5.sig
|
||||
@@ -0,0 +1,4 @@
|
||||
+0506e3
|
||||
+family: 6 (0x06)
|
||||
+model: 94 (0x5e)
|
||||
+stepping: 3 (0x03)
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5.xml
|
||||
new file mode 100644
|
||||
index 0000000000..437429d61d
|
||||
--- /dev/null
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5.xml
|
||||
@@ -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>
|
||||
--
|
||||
2.21.0
|
||||
|
||||
@@ -1,126 +0,0 @@
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Wed, 15 Nov 2017 15:02:58 +0100
|
||||
Subject: [PATCH] qemu: caps: Add capability for 'share-rw' disk option
|
||||
|
||||
'share-rw' for the disk device configures qemu to allow concurrent
|
||||
access to the backing storage.
|
||||
|
||||
The capability is checked in various supported disk frontend buses since
|
||||
it does not make sense to partially backport it.
|
||||
|
||||
(cherry picked from commit 860a3c4bea1d24773d8a495f213d5de3ac48a462)
|
||||
---
|
||||
src/qemu/qemu_capabilities.c | 14 ++++++++++++++
|
||||
src/qemu/qemu_capabilities.h | 10 ++++++++++
|
||||
tests/qemucapabilitiesdata/caps_2.9.0.ppc64le.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 1 +
|
||||
5 files changed, 27 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
|
||||
index e7ea6f47c..2de84715e 100644
|
||||
--- a/src/qemu/qemu_capabilities.c
|
||||
+++ b/src/qemu/qemu_capabilities.c
|
||||
@@ -439,6 +439,16 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
|
||||
"virtio-net.tx_queue_size",
|
||||
"chardev-reconnect",
|
||||
"virtio-gpu.max_outputs",
|
||||
+
|
||||
+ /* 270 */
|
||||
+ "vxhs",
|
||||
+ "virtio-blk.num-queues",
|
||||
+ "machine.pseries.resize-hpt",
|
||||
+ "vmcoreinfo",
|
||||
+ "spapr-vty",
|
||||
+
|
||||
+ /* 275 */
|
||||
+ "disk-share-rw",
|
||||
);
|
||||
|
||||
|
||||
@@ -1702,6 +1712,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBlk[] = {
|
||||
{ "event_idx", QEMU_CAPS_VIRTIO_BLK_EVENT_IDX },
|
||||
{ "scsi", QEMU_CAPS_VIRTIO_BLK_SCSI },
|
||||
{ "logical_block_size", QEMU_CAPS_BLOCKIO },
|
||||
+ { "share-rw", QEMU_CAPS_DISK_SHARE_RW },
|
||||
};
|
||||
|
||||
static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioNet[] = {
|
||||
@@ -1732,10 +1743,12 @@ static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVfioPCI[] = {
|
||||
static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsSCSIDisk[] = {
|
||||
{ "channel", QEMU_CAPS_SCSI_DISK_CHANNEL },
|
||||
{ "wwn", QEMU_CAPS_SCSI_DISK_WWN },
|
||||
+ { "share-rw", QEMU_CAPS_DISK_SHARE_RW },
|
||||
};
|
||||
|
||||
static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsIDEDrive[] = {
|
||||
{ "wwn", QEMU_CAPS_IDE_DRIVE_WWN },
|
||||
+ { "share-rw", QEMU_CAPS_DISK_SHARE_RW },
|
||||
};
|
||||
|
||||
static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsPiix4PM[] = {
|
||||
@@ -1766,6 +1779,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsQ35PCIHost[] = {
|
||||
|
||||
static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsUSBStorage[] = {
|
||||
{ "removable", QEMU_CAPS_USB_STORAGE_REMOVABLE },
|
||||
+ { "share-rw", QEMU_CAPS_DISK_SHARE_RW },
|
||||
};
|
||||
|
||||
static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsKVMPit[] = {
|
||||
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
|
||||
index f32687d4a..9c92d6b46 100644
|
||||
--- a/src/qemu/qemu_capabilities.h
|
||||
+++ b/src/qemu/qemu_capabilities.h
|
||||
@@ -426,6 +426,16 @@ typedef enum {
|
||||
QEMU_CAPS_CHARDEV_RECONNECT, /* -chardev reconnect */
|
||||
QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS, /* -device virtio-(vga|gpu-*),max-outputs= */
|
||||
|
||||
+ /* 270 */
|
||||
+ QEMU_CAPS_VXHS, /* -drive file.driver=vxhs via query-qmp-schema */
|
||||
+ QEMU_CAPS_VIRTIO_BLK_NUM_QUEUES, /* virtio-blk-*.num-queues */
|
||||
+ QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT, /* -machine pseries,resize-hpt */
|
||||
+ QEMU_CAPS_DEVICE_VMCOREINFO, /* -device vmcoreinfo */
|
||||
+ QEMU_CAPS_DEVICE_SPAPR_VTY, /* -device spapr-vty */
|
||||
+
|
||||
+ /* 275 */
|
||||
+ QEMU_CAPS_DISK_SHARE_RW, /* share-rw=on for concurrent disk access */
|
||||
+
|
||||
QEMU_CAPS_LAST /* this must always be the last item */
|
||||
} virQEMUCapsFlags;
|
||||
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.ppc64le.xml b/tests/qemucapabilitiesdata/caps_2.9.0.ppc64le.xml
|
||||
index a373a6db6..9551907c6 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_2.9.0.ppc64le.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_2.9.0.ppc64le.xml
|
||||
@@ -172,6 +172,7 @@
|
||||
<flag name='vnc-multi-servers'/>
|
||||
<flag name='chardev-reconnect'/>
|
||||
<flag name='virtio-gpu.max_outputs'/>
|
||||
+ <flag name='disk-share-rw'/>
|
||||
<version>2009000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package> (v2.9.0)</package>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml
|
||||
index e80782cfb..0a6fbd077 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml
|
||||
@@ -137,6 +137,7 @@
|
||||
<flag name='vnc-multi-servers'/>
|
||||
<flag name='chardev-reconnect'/>
|
||||
<flag name='virtio-gpu.max_outputs'/>
|
||||
+ <flag name='disk-share-rw'/>
|
||||
<version>2009000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package></package>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
|
||||
index 3641d0332..1294ebdb3 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
|
||||
@@ -220,6 +220,7 @@
|
||||
<flag name='vnc-multi-servers'/>
|
||||
<flag name='chardev-reconnect'/>
|
||||
<flag name='virtio-gpu.max_outputs'/>
|
||||
+ <flag name='disk-share-rw'/>
|
||||
<version>2009000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package> (v2.9.0)</package>
|
||||
@@ -0,0 +1,105 @@
|
||||
From 7bde733e906a9eb513448fd58201a333a1793811 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Fri, 5 Apr 2019 15:11:20 +0200
|
||||
Subject: [PATCH 4/4] cpu_map: Define md-clear CPUID bit
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
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 538d873571d7a682852dc1d70e5f4478f4d64e85)
|
||||
|
||||
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>
|
||||
---
|
||||
src/cpu/cpu_map.xml | 3 +++
|
||||
tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-enabled.xml | 2 +-
|
||||
tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-guest.xml | 1 +
|
||||
tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-host.xml | 1 +
|
||||
tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-json.xml | 1 +
|
||||
5 files changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml
|
||||
index 96daa0f9af..250e241df9 100644
|
||||
--- a/src/cpu/cpu_map.xml
|
||||
+++ b/src/cpu/cpu_map.xml
|
||||
@@ -295,6 +295,9 @@
|
||||
<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>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-enabled.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-enabled.xml
|
||||
index 0deca9fba6..74763a462b 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-enabled.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-enabled.xml
|
||||
@@ -2,7 +2,7 @@
|
||||
<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='0x8c000000'/>
|
||||
+ <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>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-guest.xml
|
||||
index 141c01c841..3b3472742e 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-guest.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-guest.xml
|
||||
@@ -19,6 +19,7 @@
|
||||
<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='stibp'/>
|
||||
<feature policy='require' name='ssbd'/>
|
||||
<feature policy='require' name='xsaves'/>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-host.xml
|
||||
index 53bfc9728d..df4f97417c 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-host.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-host.xml
|
||||
@@ -20,6 +20,7 @@
|
||||
<feature name='osxsave'/>
|
||||
<feature name='tsc_adjust'/>
|
||||
<feature name='clflushopt'/>
|
||||
+ <feature name='md-clear'/>
|
||||
<feature name='stibp'/>
|
||||
<feature name='ssbd'/>
|
||||
<feature name='xsaves'/>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-json.xml
|
||||
index 1f321db273..a5591278df 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-json.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-json.xml
|
||||
@@ -5,6 +5,7 @@
|
||||
<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='stibp'/>
|
||||
<feature policy='require' name='ssbd'/>
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
--
|
||||
2.21.0
|
||||
|
||||
@@ -1,133 +0,0 @@
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Wed, 15 Nov 2017 15:21:14 +0100
|
||||
Subject: [PATCH] qemu: command: Mark <shared/> disks as such in qemu
|
||||
|
||||
Qemu has now an internal mechanism for locking images to fix specific
|
||||
cases of disk corruption. This requires libvirt to mark the image as
|
||||
shared so that qemu lifts certain restrictions.
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1378242
|
||||
(cherry picked from commit 28907b0043fbf71085a798372ab9c816ba043b93)
|
||||
---
|
||||
src/qemu/qemu_command.c | 4 +++
|
||||
.../qemuxml2argv-disk-drive-shared-locking.args | 32 +++++++++++++++++
|
||||
.../qemuxml2argv-disk-drive-shared-locking.xml | 42 ++++++++++++++++++++++
|
||||
tests/qemuxml2argvtest.c | 2 ++
|
||||
4 files changed, 80 insertions(+)
|
||||
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-locking.args
|
||||
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-locking.xml
|
||||
|
||||
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||
index ae78cd17e..883525752 100644
|
||||
--- a/src/qemu/qemu_command.c
|
||||
+++ b/src/qemu/qemu_command.c
|
||||
@@ -2075,6 +2075,10 @@ qemuBuildDriveDevStr(const virDomainDef *def,
|
||||
goto error;
|
||||
}
|
||||
|
||||
+ if (disk->src->shared &&
|
||||
+ virQEMUCapsGet(qemuCaps, QEMU_CAPS_DISK_SHARE_RW))
|
||||
+ virBufferAddLit(&opt, ",share-rw=on");
|
||||
+
|
||||
if (!(drivealias = qemuAliasFromDisk(disk)))
|
||||
goto error;
|
||||
virBufferAsprintf(&opt, ",drive=%s,id=%s", drivealias, disk->info.alias);
|
||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-locking.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-locking.args
|
||||
new file mode 100644
|
||||
index 000000000..cdf17f26d
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-locking.args
|
||||
@@ -0,0 +1,32 @@
|
||||
+LC_ALL=C \
|
||||
+PATH=/bin \
|
||||
+HOME=/home/test \
|
||||
+USER=test \
|
||||
+LOGNAME=test \
|
||||
+QEMU_AUDIO_DRV=none \
|
||||
+/usr/bin/qemu-system-i686 \
|
||||
+-name QEMUGuest1 \
|
||||
+-S \
|
||||
+-M pc \
|
||||
+-m 214 \
|
||||
+-smp 1,sockets=1,cores=1,threads=1 \
|
||||
+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
+-nographic \
|
||||
+-nodefaults \
|
||||
+-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
|
||||
+server,nowait \
|
||||
+-mon chardev=charmonitor,id=monitor,mode=readline \
|
||||
+-no-acpi \
|
||||
+-boot c \
|
||||
+-device virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x3 \
|
||||
+-usb \
|
||||
+-drive file=/dev/ide,format=raw,if=none,id=drive-ide0-0-0,cache=none \
|
||||
+-device ide-drive,bus=ide.0,unit=0,share-rw=on,drive=drive-ide0-0-0,\
|
||||
+id=ide0-0-0 \
|
||||
+-drive file=/dev/scsi,format=raw,if=none,id=drive-scsi0-0-0-0,cache=none \
|
||||
+-device scsi-disk,bus=scsi0.0,channel=0,scsi-id=0,lun=0,share-rw=on,\
|
||||
+drive=drive-scsi0-0-0-0,id=scsi0-0-0-0 \
|
||||
+-drive file=/dev/virtio,format=raw,if=none,id=drive-virtio-disk0,cache=none \
|
||||
+-device virtio-blk-pci,bus=pci.0,addr=0x4,share-rw=on,drive=drive-virtio-disk0,\
|
||||
+id=virtio-disk0 \
|
||||
+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5
|
||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-locking.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-locking.xml
|
||||
new file mode 100644
|
||||
index 000000000..dd48857a3
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-shared-locking.xml
|
||||
@@ -0,0 +1,42 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219136</memory>
|
||||
+ <currentMemory unit='KiB'>219136</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='i686' machine='pc'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-i686</emulator>
|
||||
+ <disk type='block' device='disk'>
|
||||
+ <driver name='qemu' type='raw'/>
|
||||
+ <source dev='/dev/ide'/>
|
||||
+ <target dev='hda' bus='ide'/>
|
||||
+ <shareable/>
|
||||
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||
+ </disk>
|
||||
+ <disk type='block' device='disk'>
|
||||
+ <driver name='qemu' type='raw'/>
|
||||
+ <source dev='/dev/scsi'/>
|
||||
+ <target dev='sda' bus='scsi'/>
|
||||
+ <shareable/>
|
||||
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||
+ </disk>
|
||||
+ <disk type='block' device='disk'>
|
||||
+ <driver name='qemu' type='raw'/>
|
||||
+ <source dev='/dev/virtio'/>
|
||||
+ <target dev='vda' bus='virtio'/>
|
||||
+ <shareable/>
|
||||
+ </disk>
|
||||
+ <controller type='usb' index='0'/>
|
||||
+ <controller type='ide' index='0'/>
|
||||
+ <controller type='scsi' index='0' model='virtio-scsi'/>
|
||||
+ <memballoon model='virtio'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
|
||||
index 93f892229..9585fdb70 100644
|
||||
--- a/tests/qemuxml2argvtest.c
|
||||
+++ b/tests/qemuxml2argvtest.c
|
||||
@@ -896,6 +896,8 @@ mymain(void)
|
||||
DO_TEST("disk-drive-shared",
|
||||
QEMU_CAPS_DRIVE_SERIAL);
|
||||
DO_TEST_PARSE_ERROR("disk-drive-shared-qcow", NONE);
|
||||
+ DO_TEST("disk-drive-shared-locking",
|
||||
+ QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DISK_SHARE_RW);
|
||||
DO_TEST("disk-drive-error-policy-stop",
|
||||
QEMU_CAPS_MONITOR_JSON);
|
||||
DO_TEST("disk-drive-error-policy-enospace",
|
||||
@@ -0,0 +1,56 @@
|
||||
From 4cb90fa2335b75a0fc39440853bd681955b326a4 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||
Date: Tue, 14 May 2019 21:09:59 +0100
|
||||
Subject: [PATCH] cputest: remove stibp flag from test data
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
stibp flag doesn't exist in this maint branch.
|
||||
|
||||
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
---
|
||||
tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-guest.xml | 1 -
|
||||
tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-host.xml | 1 -
|
||||
tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-json.xml | 1 -
|
||||
3 files changed, 3 deletions(-)
|
||||
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-guest.xml
|
||||
index 3b3472742e..29c1fdb80a 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-guest.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-guest.xml
|
||||
@@ -20,7 +20,6 @@
|
||||
<feature policy='require' name='tsc_adjust'/>
|
||||
<feature policy='require' name='clflushopt'/>
|
||||
<feature policy='require' name='md-clear'/>
|
||||
- <feature policy='require' name='stibp'/>
|
||||
<feature policy='require' name='ssbd'/>
|
||||
<feature policy='require' name='xsaves'/>
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-host.xml
|
||||
index df4f97417c..2003ca9ef6 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-host.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-host.xml
|
||||
@@ -21,7 +21,6 @@
|
||||
<feature name='tsc_adjust'/>
|
||||
<feature name='clflushopt'/>
|
||||
<feature name='md-clear'/>
|
||||
- <feature name='stibp'/>
|
||||
<feature name='ssbd'/>
|
||||
<feature name='xsaves'/>
|
||||
<feature name='pdpe1gb'/>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-json.xml
|
||||
index a5591278df..d6529c59a3 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-json.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1225-v5-json.xml
|
||||
@@ -6,7 +6,6 @@
|
||||
<feature policy='require' name='tsc_adjust'/>
|
||||
<feature policy='require' name='clflushopt'/>
|
||||
<feature policy='require' name='md-clear'/>
|
||||
- <feature policy='require' name='stibp'/>
|
||||
<feature policy='require' name='ssbd'/>
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
</cpu>
|
||||
--
|
||||
2.21.0
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
From 39fb5ab3125d1669344bab94ccb71bce814d9ae2 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||
Date: Tue, 30 Apr 2019 17:26:13 +0100
|
||||
Subject: [PATCH 1/3] admin: reject clients unless their UID matches the
|
||||
current UID
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
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 96f41cd765c9e525fe28ee5abbfbf4a79b3720c7)
|
||||
---
|
||||
src/admin/admin_server_dispatch.c | 22 ++++++++++++++++++++++
|
||||
1 file changed, 22 insertions(+)
|
||||
|
||||
diff --git a/src/admin/admin_server_dispatch.c b/src/admin/admin_server_dispatch.c
|
||||
index b78ff902c0..9f25813ae3 100644
|
||||
--- a/src/admin/admin_server_dispatch.c
|
||||
+++ b/src/admin/admin_server_dispatch.c
|
||||
@@ -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,
|
||||
+ ×tamp) < 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;
|
||||
--
|
||||
2.21.0
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
From 41f06e6095e17b61b2af35821d204afc5c34777c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||
Date: Tue, 30 Apr 2019 16:51:37 +0100
|
||||
Subject: [PATCH 2/3] locking: restrict sockets to mode 0600
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
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 f111e09468693909b1f067aa575efdafd9a262a1)
|
||||
---
|
||||
src/locking/virtlockd-admin.socket.in | 1 +
|
||||
src/locking/virtlockd.socket.in | 1 +
|
||||
2 files changed, 2 insertions(+)
|
||||
|
||||
diff --git a/src/locking/virtlockd-admin.socket.in b/src/locking/virtlockd-admin.socket.in
|
||||
index 2a7500f3d0..f674c492f7 100644
|
||||
--- a/src/locking/virtlockd-admin.socket.in
|
||||
+++ b/src/locking/virtlockd-admin.socket.in
|
||||
@@ -5,6 +5,7 @@ Before=libvirtd.service
|
||||
[Socket]
|
||||
ListenStream=@localstatedir@/run/libvirt/virtlockd-admin-sock
|
||||
Service=virtlockd.service
|
||||
+SocketMode=0600
|
||||
|
||||
[Install]
|
||||
WantedBy=sockets.target
|
||||
diff --git a/src/locking/virtlockd.socket.in b/src/locking/virtlockd.socket.in
|
||||
index 45e0f20235..d701b27516 100644
|
||||
--- a/src/locking/virtlockd.socket.in
|
||||
+++ b/src/locking/virtlockd.socket.in
|
||||
@@ -4,6 +4,7 @@ Before=libvirtd.service
|
||||
|
||||
[Socket]
|
||||
ListenStream=@localstatedir@/run/libvirt/virtlockd-sock
|
||||
+SocketMode=0600
|
||||
|
||||
[Install]
|
||||
WantedBy=sockets.target
|
||||
--
|
||||
2.21.0
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
From f0e014133104cdb5af5c7d96a7aa6dc0f1bbb03c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||
Date: Tue, 30 Apr 2019 17:27:41 +0100
|
||||
Subject: [PATCH 3/3] logging: restrict sockets to mode 0600
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
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 e37bd65f9948c1185456b2cdaa3bd6e875af680f)
|
||||
---
|
||||
src/logging/virtlogd-admin.socket.in | 1 +
|
||||
src/logging/virtlogd.socket.in | 1 +
|
||||
2 files changed, 2 insertions(+)
|
||||
|
||||
diff --git a/src/logging/virtlogd-admin.socket.in b/src/logging/virtlogd-admin.socket.in
|
||||
index 595e6c4c4b..5c41dfeb7b 100644
|
||||
--- a/src/logging/virtlogd-admin.socket.in
|
||||
+++ b/src/logging/virtlogd-admin.socket.in
|
||||
@@ -5,6 +5,7 @@ Before=libvirtd.service
|
||||
[Socket]
|
||||
ListenStream=@localstatedir@/run/libvirt/virtlogd-admin-sock
|
||||
Service=virtlogd.service
|
||||
+SocketMode=0600
|
||||
|
||||
[Install]
|
||||
WantedBy=sockets.target
|
||||
diff --git a/src/logging/virtlogd.socket.in b/src/logging/virtlogd.socket.in
|
||||
index 22b9360c8d..ae48cdab9a 100644
|
||||
--- a/src/logging/virtlogd.socket.in
|
||||
+++ b/src/logging/virtlogd.socket.in
|
||||
@@ -4,6 +4,7 @@ Before=libvirtd.service
|
||||
|
||||
[Socket]
|
||||
ListenStream=@localstatedir@/run/libvirt/virtlogd-sock
|
||||
+SocketMode=0600
|
||||
|
||||
[Install]
|
||||
WantedBy=sockets.target
|
||||
--
|
||||
2.21.0
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Wed, 20 Dec 2017 12:58:36 +0100
|
||||
Subject: [PATCH] util: probe: Add quiet versions of the "PROBE" macro
|
||||
|
||||
PROBE macro adds a logging entry, when used in places seeing a lot of
|
||||
traffic this can cause a significant slowdown.
|
||||
|
||||
(cherry picked from commit f06e488d5484031a76e7ed231c8fef8fa1181d2c)
|
||||
---
|
||||
src/util/virprobe.h | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/src/util/virprobe.h b/src/util/virprobe.h
|
||||
index 7565954af..bd8c32964 100644
|
||||
--- a/src/util/virprobe.h
|
||||
+++ b/src/util/virprobe.h
|
||||
@@ -90,11 +90,19 @@
|
||||
PROBE_EXPAND(LIBVIRT_ ## NAME, \
|
||||
VIR_ADD_CASTS(__VA_ARGS__)); \
|
||||
}
|
||||
+
|
||||
+# define PROBE_QUIET(NAME, FMT, ...) \
|
||||
+ if (LIBVIRT_ ## NAME ## _ENABLED()) { \
|
||||
+ PROBE_EXPAND(LIBVIRT_ ## NAME, \
|
||||
+ VIR_ADD_CASTS(__VA_ARGS__)); \
|
||||
+ }
|
||||
# else
|
||||
# define PROBE(NAME, FMT, ...) \
|
||||
VIR_INFO_INT(&virLogSelf, \
|
||||
__FILE__, __LINE__, __func__, \
|
||||
#NAME ": " FMT, __VA_ARGS__);
|
||||
+
|
||||
+# define PROBE_QUIET(NAME, FMT, ...)
|
||||
# endif
|
||||
|
||||
#endif /* __VIR_PROBE_H__ */
|
||||
@@ -1,49 +0,0 @@
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Wed, 20 Dec 2017 13:09:07 +0100
|
||||
Subject: [PATCH] qemu: monitor: Decrease logging verbosity
|
||||
|
||||
The PROBE macro used in qemuMonitorIOProcess and the VIR_DEBUG message
|
||||
in qemuMonitorJSONIOProcess create a lot of logging churn when debug
|
||||
logging is enabled during monitor communication.
|
||||
|
||||
The messages logged from the PROBE macro are rather useless since they
|
||||
are reporting the partial state of receiving the reply from qemu. The
|
||||
actual full reply is still logged in qemuMonitorJSONIOProcessLine once
|
||||
the full message is received.
|
||||
|
||||
(cherry picked from commit f10bb3347b43d900ff361cda5fe1996782284991)
|
||||
---
|
||||
src/qemu/qemu_monitor.c | 4 ++--
|
||||
src/qemu/qemu_monitor_json.c | 3 +++
|
||||
2 files changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
|
||||
index 19082d8bf..3def28852 100644
|
||||
--- a/src/qemu/qemu_monitor.c
|
||||
+++ b/src/qemu/qemu_monitor.c
|
||||
@@ -434,8 +434,8 @@ qemuMonitorIOProcess(qemuMonitorPtr mon)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
- PROBE(QEMU_MONITOR_IO_PROCESS,
|
||||
- "mon=%p buf=%s len=%zu", mon, mon->buffer, mon->bufferOffset);
|
||||
+ PROBE_QUIET(QEMU_MONITOR_IO_PROCESS, "mon=%p buf=%s len=%zu",
|
||||
+ mon, mon->buffer, mon->bufferOffset);
|
||||
|
||||
if (mon->json)
|
||||
len = qemuMonitorJSONIOProcess(mon,
|
||||
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
|
||||
index df5fb7c8f..461aae089 100644
|
||||
--- a/src/qemu/qemu_monitor_json.c
|
||||
+++ b/src/qemu/qemu_monitor_json.c
|
||||
@@ -259,7 +259,10 @@ int qemuMonitorJSONIOProcess(qemuMonitorPtr mon,
|
||||
}
|
||||
}
|
||||
|
||||
+#if DEBUG_IO
|
||||
VIR_DEBUG("Total used %d bytes out of %zd available in buffer", used, len);
|
||||
+#endif
|
||||
+
|
||||
return used;
|
||||
}
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
From: Lubomir Rintel <lkundrak@v3.sk>
|
||||
Date: Sat, 27 Jan 2018 23:43:58 +0100
|
||||
Subject: [PATCH] virlog: determine the hostname on startup CVE-2018-6764
|
||||
|
||||
At later point it might not be possible or even safe to use getaddrinfo(). It
|
||||
can in turn result in a load of NSS module.
|
||||
|
||||
Notably, on a LXC container startup we may find ourselves with the guest
|
||||
filesystem already having replaced the host one. Loading a NSS module
|
||||
from the guest tree would allow a malicous guest to escape the
|
||||
confinement of its container environment because libvirt will not yet
|
||||
have locked it down.
|
||||
|
||||
(cherry picked from commit 759b4d1b0fe5f4d84d98b99153dfa7ac289dd167)
|
||||
---
|
||||
src/util/virlog.c | 14 +++++++++-----
|
||||
1 file changed, 9 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/util/virlog.c b/src/util/virlog.c
|
||||
index d45a451a7..05e0e199e 100644
|
||||
--- a/src/util/virlog.c
|
||||
+++ b/src/util/virlog.c
|
||||
@@ -64,6 +64,7 @@
|
||||
VIR_LOG_INIT("util.log");
|
||||
|
||||
static regex_t *virLogRegex;
|
||||
+static char *virLogHostname;
|
||||
|
||||
|
||||
#define VIR_LOG_DATE_REGEX "[0-9]{4}-[0-9]{2}-[0-9]{2}"
|
||||
@@ -271,6 +272,12 @@ virLogOnceInit(void)
|
||||
VIR_FREE(virLogRegex);
|
||||
}
|
||||
|
||||
+ /* We get and remember the hostname early, because at later time
|
||||
+ * it might not be possible to load NSS modules via getaddrinfo()
|
||||
+ * (e.g. at container startup the host filesystem will not be
|
||||
+ * accessible anymore. */
|
||||
+ virLogHostname = virGetHostnameQuiet();
|
||||
+
|
||||
virLogUnlock();
|
||||
return 0;
|
||||
}
|
||||
@@ -466,17 +473,14 @@ static int
|
||||
virLogHostnameString(char **rawmsg,
|
||||
char **msg)
|
||||
{
|
||||
- char *hostname = virGetHostnameQuiet();
|
||||
char *hoststr;
|
||||
|
||||
- if (!hostname)
|
||||
+ if (!virLogHostname)
|
||||
return -1;
|
||||
|
||||
- if (virAsprintfQuiet(&hoststr, "hostname: %s", hostname) < 0) {
|
||||
- VIR_FREE(hostname);
|
||||
+ if (virAsprintfQuiet(&hoststr, "hostname: %s", virLogHostname) < 0) {
|
||||
return -1;
|
||||
}
|
||||
- VIR_FREE(hostname);
|
||||
|
||||
if (virLogFormatString(msg, 0, NULL, VIR_LOG_INFO, hoststr) < 0) {
|
||||
VIR_FREE(hoststr);
|
||||
@@ -1,27 +0,0 @@
|
||||
From: Andrea Bolognani <abologna@redhat.com>
|
||||
Date: Wed, 7 Feb 2018 14:39:18 +0100
|
||||
Subject: [PATCH] util: Fix syntax-check
|
||||
|
||||
Broken by 759b4d1b0fe5f4d84d98b99153dfa7ac289dd167.
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
(cherry picked from commit 6ce3acc129bfdbe7fd02bcb8bbe8af6d13903684)
|
||||
---
|
||||
src/util/virlog.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/util/virlog.c b/src/util/virlog.c
|
||||
index 05e0e199e..056b53cda 100644
|
||||
--- a/src/util/virlog.c
|
||||
+++ b/src/util/virlog.c
|
||||
@@ -478,9 +478,8 @@ virLogHostnameString(char **rawmsg,
|
||||
if (!virLogHostname)
|
||||
return -1;
|
||||
|
||||
- if (virAsprintfQuiet(&hoststr, "hostname: %s", virLogHostname) < 0) {
|
||||
+ if (virAsprintfQuiet(&hoststr, "hostname: %s", virLogHostname) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
if (virLogFormatString(msg, 0, NULL, VIR_LOG_INFO, hoststr) < 0) {
|
||||
VIR_FREE(hoststr);
|
||||
@@ -1,121 +0,0 @@
|
||||
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||
Date: Mon, 12 Feb 2018 10:03:08 +0000
|
||||
Subject: [PATCH] log: fix deadlock obtaining hostname (related CVE-2018-6764)
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The fix for CVE-2018-6764 introduced a potential deadlock scenario
|
||||
that gets triggered by the NSS module when virGetHostname() calls
|
||||
getaddrinfo to resolve the hostname:
|
||||
|
||||
#0 0x00007f6e714b57e7 in futex_wait
|
||||
#1 futex_wait_simple
|
||||
#2 __pthread_once_slow
|
||||
#3 0x00007f6e71d16e7d in virOnce
|
||||
#4 0x00007f6e71d0997c in virLogInitialize
|
||||
#5 0x00007f6e71d0a09a in virLogVMessage
|
||||
#6 0x00007f6e71d09ffd in virLogMessage
|
||||
#7 0x00007f6e71d0db22 in virObjectNew
|
||||
#8 0x00007f6e71d0dbf1 in virObjectLockableNew
|
||||
#9 0x00007f6e71d0d3e5 in virMacMapNew
|
||||
#10 0x00007f6e71cdc50a in findLease
|
||||
#11 0x00007f6e71cdcc56 in _nss_libvirt_gethostbyname4_r
|
||||
#12 0x00007f6e724631fc in gaih_inet
|
||||
#13 0x00007f6e72464697 in __GI_getaddrinfo
|
||||
#14 0x00007f6e71d19e81 in virGetHostnameImpl
|
||||
#15 0x00007f6e71d1a057 in virGetHostnameQuiet
|
||||
#16 0x00007f6e71d09936 in virLogOnceInit
|
||||
#17 0x00007f6e71d09952 in virLogOnce
|
||||
#18 0x00007f6e714b5829 in __pthread_once_slow
|
||||
#19 0x00007f6e71d16e7d in virOnce
|
||||
#20 0x00007f6e71d0997c in virLogInitialize
|
||||
#21 0x00007f6e71d0a09a in virLogVMessage
|
||||
#22 0x00007f6e71d09ffd in virLogMessage
|
||||
#23 0x00007f6e71d0db22 in virObjectNew
|
||||
#24 0x00007f6e71d0dbf1 in virObjectLockableNew
|
||||
#25 0x00007f6e71d0d3e5 in virMacMapNew
|
||||
#26 0x00007f6e71cdc50a in findLease
|
||||
#27 0x00007f6e71cdc839 in _nss_libvirt_gethostbyname3_r
|
||||
#28 0x00007f6e71cdc724 in _nss_libvirt_gethostbyname2_r
|
||||
#29 0x00007f6e7248f72f in __gethostbyname2_r
|
||||
#30 0x00007f6e7248f494 in gethostbyname2
|
||||
#31 0x000056348c30c36d in hosts_keys
|
||||
#32 0x000056348c30b7d2 in main
|
||||
|
||||
Fortunately the extra stuff virGetHostname does is totally irrelevant to
|
||||
the needs of the logging code, so we can just inline a call to the
|
||||
native hostname() syscall directly.
|
||||
|
||||
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
(cherry picked from commit c2dc6698c88fb591639e542c8ecb0076c54f3dfb)
|
||||
---
|
||||
cfg.mk | 2 +-
|
||||
src/util/virlog.c | 20 ++++++++++++++------
|
||||
2 files changed, 15 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/cfg.mk b/cfg.mk
|
||||
index 56cb14bd9..a4131592c 100644
|
||||
--- a/cfg.mk
|
||||
+++ b/cfg.mk
|
||||
@@ -1158,7 +1158,7 @@ _src2=src/(util/vircommand|libvirt|lxc/lxc_controller|locking/lock_daemon|loggin
|
||||
exclude_file_name_regexp--sc_prohibit_fork_wrappers = \
|
||||
(^($(_src2)|tests/testutils|daemon/libvirtd)\.c$$)
|
||||
|
||||
-exclude_file_name_regexp--sc_prohibit_gethostname = ^src/util/virutil\.c$$
|
||||
+exclude_file_name_regexp--sc_prohibit_gethostname = ^src/util/vir(util|log)\.c$$
|
||||
|
||||
exclude_file_name_regexp--sc_prohibit_internal_functions = \
|
||||
^src/(util/(viralloc|virutil|virfile)\.[hc]|esx/esx_vi\.c)$$
|
||||
diff --git a/src/util/virlog.c b/src/util/virlog.c
|
||||
index 056b53cda..f76fc2caf 100644
|
||||
--- a/src/util/virlog.c
|
||||
+++ b/src/util/virlog.c
|
||||
@@ -64,7 +64,7 @@
|
||||
VIR_LOG_INIT("util.log");
|
||||
|
||||
static regex_t *virLogRegex;
|
||||
-static char *virLogHostname;
|
||||
+static char virLogHostname[HOST_NAME_MAX+1];
|
||||
|
||||
|
||||
#define VIR_LOG_DATE_REGEX "[0-9]{4}-[0-9]{2}-[0-9]{2}"
|
||||
@@ -261,6 +261,8 @@ virLogPriorityString(virLogPriority lvl)
|
||||
static int
|
||||
virLogOnceInit(void)
|
||||
{
|
||||
+ int r;
|
||||
+
|
||||
if (virMutexInit(&virLogMutex) < 0)
|
||||
return -1;
|
||||
|
||||
@@ -275,8 +277,17 @@ virLogOnceInit(void)
|
||||
/* We get and remember the hostname early, because at later time
|
||||
* it might not be possible to load NSS modules via getaddrinfo()
|
||||
* (e.g. at container startup the host filesystem will not be
|
||||
- * accessible anymore. */
|
||||
- virLogHostname = virGetHostnameQuiet();
|
||||
+ * accessible anymore.
|
||||
+ * Must not use virGetHostname though as that causes re-entrancy
|
||||
+ * problems if it triggers logging codepaths
|
||||
+ */
|
||||
+ r = gethostname(virLogHostname, sizeof(virLogHostname));
|
||||
+ if (r == -1) {
|
||||
+ ignore_value(virStrcpy(virLogHostname,
|
||||
+ "(unknown)", sizeof(virLogHostname)));
|
||||
+ } else {
|
||||
+ NUL_TERMINATE(virLogHostname);
|
||||
+ }
|
||||
|
||||
virLogUnlock();
|
||||
return 0;
|
||||
@@ -475,9 +486,6 @@ virLogHostnameString(char **rawmsg,
|
||||
{
|
||||
char *hoststr;
|
||||
|
||||
- if (!virLogHostname)
|
||||
- return -1;
|
||||
-
|
||||
if (virAsprintfQuiet(&hoststr, "hostname: %s", virLogHostname) < 0)
|
||||
return -1;
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Thu, 4 Jan 2018 11:11:53 +0100
|
||||
Subject: [PATCH] qemuDomainAttachDeviceMknodHelper: Remove symlink before
|
||||
creating it
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1528502
|
||||
|
||||
So imagine you have /dev/blah symlink which points to /dev/sda.
|
||||
You attach /dev/blah as disk to your domain. Libvirt correctly
|
||||
creates the /dev/blah -> /dev/sda symlink in the qemu namespace.
|
||||
However, then you detach the disk, change the symlink so that it
|
||||
points to /dev/sdb and tries to attach the disk again. This time,
|
||||
however, the attach fails (well, qemu attaches wrong disk)
|
||||
because the code assumes that symlinks don't change. Well they
|
||||
do.
|
||||
|
||||
This is inspired by test fix written by Eduardo Habkost.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
|
||||
(cherry picked from commit db98e7f67ea0d7699410f514f01947cef5128a6c)
|
||||
---
|
||||
src/qemu/qemu_domain.c | 22 ++++++++++++++++------
|
||||
1 file changed, 16 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||
index 42d17c1b0..e0f4aaafa 100644
|
||||
--- a/src/qemu/qemu_domain.c
|
||||
+++ b/src/qemu/qemu_domain.c
|
||||
@@ -8864,13 +8864,23 @@ qemuDomainAttachDeviceMknodHelper(pid_t pid ATTRIBUTE_UNUSED,
|
||||
|
||||
if (isLink) {
|
||||
VIR_DEBUG("Creating symlink %s -> %s", data->file, data->target);
|
||||
+
|
||||
+ /* First, unlink the symlink target. Symlinks change and
|
||||
+ * therefore we have no guarantees that pre-existing
|
||||
+ * symlink is still valid. */
|
||||
+ if (unlink(data->file) < 0 &&
|
||||
+ errno != ENOENT) {
|
||||
+ virReportSystemError(errno,
|
||||
+ _("Unable to remove symlink %s"),
|
||||
+ data->file);
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+
|
||||
if (symlink(data->target, data->file) < 0) {
|
||||
- if (errno != EEXIST) {
|
||||
- virReportSystemError(errno,
|
||||
- _("Unable to create symlink %s"),
|
||||
- data->target);
|
||||
- goto cleanup;
|
||||
- }
|
||||
+ virReportSystemError(errno,
|
||||
+ _("Unable to create symlink %s (pointing to %s)"),
|
||||
+ data->file, data->target);
|
||||
+ goto cleanup;
|
||||
} else {
|
||||
delDevice = true;
|
||||
}
|
||||
@@ -1,74 +0,0 @@
|
||||
From e18672ce9a5fff383992fd6e842d1cbe85c141ea Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Date: Tue, 12 Dec 2017 16:23:40 +0100
|
||||
Subject: [PATCH 10/19] util: add virFileReadHeaderQuiet wrapper around
|
||||
virFileReadHeaderFD
|
||||
|
||||
CVE-2017-5715
|
||||
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/libvirt_private.syms | 1 +
|
||||
src/util/virfile.c | 19 +++++++++++++++++++
|
||||
src/util/virfile.h | 2 ++
|
||||
3 files changed, 22 insertions(+)
|
||||
|
||||
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
||||
index f30a04b145..29b73fa046 100644
|
||||
--- a/src/libvirt_private.syms
|
||||
+++ b/src/libvirt_private.syms
|
||||
@@ -1703,6 +1703,7 @@ virFileReadAll;
|
||||
virFileReadAllQuiet;
|
||||
virFileReadBufQuiet;
|
||||
virFileReadHeaderFD;
|
||||
+virFileReadHeaderQuiet;
|
||||
virFileReadLimFD;
|
||||
virFileReadLink;
|
||||
virFileReadValueBitmap;
|
||||
diff --git a/src/util/virfile.c b/src/util/virfile.c
|
||||
index 2f28e83f44..269db995ff 100644
|
||||
--- a/src/util/virfile.c
|
||||
+++ b/src/util/virfile.c
|
||||
@@ -1356,6 +1356,25 @@ virFileReadHeaderFD(int fd, int maxlen, char **buf)
|
||||
}
|
||||
|
||||
|
||||
+int
|
||||
+virFileReadHeaderQuiet(const char *path,
|
||||
+ int maxlen,
|
||||
+ char **buf)
|
||||
+{
|
||||
+ int fd;
|
||||
+ int len;
|
||||
+
|
||||
+ fd = open(path, O_RDONLY);
|
||||
+ if (fd < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ len = virFileReadHeaderFD(fd, maxlen, buf);
|
||||
+ VIR_FORCE_CLOSE(fd);
|
||||
+
|
||||
+ return len;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/* A wrapper around saferead_lim that maps a failure due to
|
||||
exceeding the maximum size limitation to EOVERFLOW. */
|
||||
int
|
||||
diff --git a/src/util/virfile.h b/src/util/virfile.h
|
||||
index 57ceb80721..657e7216fb 100644
|
||||
--- a/src/util/virfile.h
|
||||
+++ b/src/util/virfile.h
|
||||
@@ -129,6 +129,8 @@ int virFileDeleteTree(const char *dir);
|
||||
|
||||
int virFileReadHeaderFD(int fd, int maxlen, char **buf)
|
||||
ATTRIBUTE_RETURN_CHECK ATTRIBUTE_NONNULL(3);
|
||||
+int virFileReadHeaderQuiet(const char *path, int maxlen, char **buf)
|
||||
+ ATTRIBUTE_RETURN_CHECK ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3);
|
||||
int virFileReadLimFD(int fd, int maxlen, char **buf)
|
||||
ATTRIBUTE_RETURN_CHECK ATTRIBUTE_NONNULL(3);
|
||||
int virFileReadAll(const char *path, int maxlen, char **buf)
|
||||
--
|
||||
2.17.0
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
From a84e70ad247da5d3ad13615efd70b91951392aa1 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Fri, 5 Jan 2018 17:43:03 +0100
|
||||
Subject: [PATCH 12/19] cpu_x86: Copy CPU signature from ancestor
|
||||
|
||||
When specifying a new CPU model in cpu_map.xml as an extension to an
|
||||
existing model, we forgot to copy the signature (family + model) from
|
||||
the original CPU model.
|
||||
|
||||
We don't use this way of specifying CPU models, but it's still supported
|
||||
and it becomes useful when someone wants to quickly hack up a CPU model
|
||||
for testing or when creating additional variants of existing models to
|
||||
help with fixing some spectral issues.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
|
||||
(cherry picked from commit b427cf4831d0ea7aac9dd1a3aa7682478356a483)
|
||||
---
|
||||
src/cpu/cpu_x86.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 2864454211..3b7a6f95fe 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1206,6 +1206,7 @@ x86ModelParse(xmlXPathContextPtr ctxt,
|
||||
VIR_FREE(name);
|
||||
|
||||
model->vendor = ancestor->vendor;
|
||||
+ model->signature = ancestor->signature;
|
||||
if (x86DataCopy(&model->data, &ancestor->data) < 0)
|
||||
goto error;
|
||||
}
|
||||
--
|
||||
2.17.0
|
||||
|
||||
@@ -1,97 +0,0 @@
|
||||
From de12d97c029d6644bb42afaa38410c4263bef41f Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Date: Tue, 12 Dec 2017 16:23:41 +0100
|
||||
Subject: [PATCH 13/19] util: introduce virHostCPUGetMicrocodeVersion
|
||||
|
||||
This new API reads host's CPU microcode version from /proc/cpuinfo.
|
||||
|
||||
Unfortunately, there is no other way of reading microcode version which
|
||||
would be usable from both system and session daemon.
|
||||
|
||||
CVE-2017-5715
|
||||
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/libvirt_private.syms | 1 +
|
||||
src/util/virhostcpu.c | 43 ++++++++++++++++++++++++++++++++++++++++
|
||||
src/util/virhostcpu.h | 2 ++
|
||||
3 files changed, 46 insertions(+)
|
||||
|
||||
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
||||
index 29b73fa046..0ecd58a12c 100644
|
||||
--- a/src/libvirt_private.syms
|
||||
+++ b/src/libvirt_private.syms
|
||||
@@ -1811,6 +1811,7 @@ virHostCPUGetCount;
|
||||
virHostCPUGetInfo;
|
||||
virHostCPUGetKVMMaxVCPUs;
|
||||
virHostCPUGetMap;
|
||||
+virHostCPUGetMicrocodeVersion;
|
||||
virHostCPUGetOnline;
|
||||
virHostCPUGetOnlineBitmap;
|
||||
virHostCPUGetPresentBitmap;
|
||||
diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
|
||||
index c485a97211..713fdec553 100644
|
||||
--- a/src/util/virhostcpu.c
|
||||
+++ b/src/util/virhostcpu.c
|
||||
@@ -1206,3 +1206,46 @@ virHostCPUGetKVMMaxVCPUs(void)
|
||||
return -1;
|
||||
}
|
||||
#endif /* HAVE_LINUX_KVM_H */
|
||||
+
|
||||
+
|
||||
+#ifdef __linux__
|
||||
+
|
||||
+unsigned int
|
||||
+virHostCPUGetMicrocodeVersion(void)
|
||||
+{
|
||||
+ char *outbuf = NULL;
|
||||
+ char *cur;
|
||||
+ unsigned int version = 0;
|
||||
+
|
||||
+ if (virFileReadHeaderQuiet(CPUINFO_PATH, 4096, &outbuf) < 0) {
|
||||
+ char ebuf[1024];
|
||||
+ VIR_DEBUG("Failed to read microcode version from %s: %s",
|
||||
+ CPUINFO_PATH, virStrerror(errno, ebuf, sizeof(ebuf)));
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ /* Account for format 'microcode : XXXX'*/
|
||||
+ if (!(cur = strstr(outbuf, "microcode")) ||
|
||||
+ !(cur = strchr(cur, ':')))
|
||||
+ goto cleanup;
|
||||
+ cur++;
|
||||
+
|
||||
+ /* Linux places the microcode revision in a 32-bit integer, so
|
||||
+ * ui is fine for us too. */
|
||||
+ if (virStrToLong_ui(cur, &cur, 0, &version) < 0)
|
||||
+ goto cleanup;
|
||||
+
|
||||
+ cleanup:
|
||||
+ VIR_FREE(outbuf);
|
||||
+ return version;
|
||||
+}
|
||||
+
|
||||
+#else
|
||||
+
|
||||
+unsigned int
|
||||
+virHostCPUGetMicrocodeVersion(void)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#endif
|
||||
diff --git a/src/util/virhostcpu.h b/src/util/virhostcpu.h
|
||||
index 67033de842..f9f3359288 100644
|
||||
--- a/src/util/virhostcpu.h
|
||||
+++ b/src/util/virhostcpu.h
|
||||
@@ -66,4 +66,6 @@ virBitmapPtr virHostCPUGetSiblingsList(unsigned int cpu);
|
||||
|
||||
int virHostCPUGetOnline(unsigned int cpu, bool *online);
|
||||
|
||||
+unsigned int virHostCPUGetMicrocodeVersion(void);
|
||||
+
|
||||
#endif /* __VIR_HOSTCPU_H__*/
|
||||
--
|
||||
2.17.0
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
From a0ad8c160ed81417e4d5b46adf3118df1b6b1b77 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Wed, 13 Dec 2017 22:30:31 +0100
|
||||
Subject: [PATCH 14/19] cpu_x86: Rename virCPUx86MapInitialize
|
||||
|
||||
The function will be used to initialize internal data of the x86 CPU
|
||||
driver (including the CPU map).
|
||||
|
||||
CVE-2017-5715
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 3b7a6f95fe..0cb0dcacb3 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -153,8 +153,8 @@ struct _virCPUx86Map {
|
||||
};
|
||||
|
||||
static virCPUx86MapPtr cpuMap;
|
||||
-int virCPUx86MapOnceInit(void);
|
||||
-VIR_ONCE_GLOBAL_INIT(virCPUx86Map);
|
||||
+int virCPUx86DriverOnceInit(void);
|
||||
+VIR_ONCE_GLOBAL_INIT(virCPUx86Driver);
|
||||
|
||||
|
||||
typedef enum {
|
||||
@@ -1387,7 +1387,7 @@ virCPUx86LoadMap(void)
|
||||
|
||||
|
||||
int
|
||||
-virCPUx86MapOnceInit(void)
|
||||
+virCPUx86DriverOnceInit(void)
|
||||
{
|
||||
if (!(cpuMap = virCPUx86LoadMap()))
|
||||
return -1;
|
||||
@@ -1399,7 +1399,7 @@ virCPUx86MapOnceInit(void)
|
||||
static virCPUx86MapPtr
|
||||
virCPUx86GetMap(void)
|
||||
{
|
||||
- if (virCPUx86MapInitialize() < 0)
|
||||
+ if (virCPUx86DriverInitialize() < 0)
|
||||
return NULL;
|
||||
|
||||
return cpuMap;
|
||||
--
|
||||
2.17.0
|
||||
|
||||
@@ -1,133 +0,0 @@
|
||||
From c628c42493170bfd70f30d9fb56d0067e6e4828a Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Date: Tue, 19 Jun 2018 16:47:20 +0100
|
||||
Subject: [PATCH 15/19] conf: include x86 microcode version in virsh
|
||||
capabiltiies
|
||||
|
||||
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.
|
||||
|
||||
In order to track the x86 microcode version in the QEMU capabilities,
|
||||
we have to fetch it and store it in the host CPU. This also makes the
|
||||
version visible in "virsh capabilities", which is a nice side effect.
|
||||
|
||||
CVE-2017-5715
|
||||
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/conf/cpu_conf.c | 14 ++++++++++++++
|
||||
src/conf/cpu_conf.h | 1 +
|
||||
src/cpu/cpu_x86.c | 9 +++++++++
|
||||
3 files changed, 24 insertions(+)
|
||||
|
||||
diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
|
||||
index c21d11d244..3f3c25320e 100644
|
||||
--- a/src/conf/cpu_conf.c
|
||||
+++ b/src/conf/cpu_conf.c
|
||||
@@ -127,6 +127,7 @@ virCPUDefCopyModelFilter(virCPUDefPtr dst,
|
||||
VIR_STRDUP(dst->vendor_id, src->vendor_id) < 0 ||
|
||||
VIR_ALLOC_N(dst->features, src->nfeatures) < 0)
|
||||
return -1;
|
||||
+ dst->microcodeVersion = src->microcodeVersion;
|
||||
dst->nfeatures_max = src->nfeatures;
|
||||
dst->nfeatures = 0;
|
||||
|
||||
@@ -178,6 +179,7 @@ virCPUDefStealModel(virCPUDefPtr dst,
|
||||
|
||||
VIR_STEAL_PTR(dst->model, src->model);
|
||||
VIR_STEAL_PTR(dst->features, src->features);
|
||||
+ dst->microcodeVersion = src->microcodeVersion;
|
||||
dst->nfeatures_max = src->nfeatures_max;
|
||||
src->nfeatures_max = 0;
|
||||
dst->nfeatures = src->nfeatures;
|
||||
@@ -379,6 +381,14 @@ virCPUDefParseXML(xmlXPathContextPtr ctxt,
|
||||
goto cleanup;
|
||||
}
|
||||
VIR_FREE(arch);
|
||||
+
|
||||
+ if (virXPathBoolean("boolean(./microcode[1]/@version)", ctxt) > 0 &&
|
||||
+ virXPathUInt("string(./microcode[1]/@version)", ctxt,
|
||||
+ &def->microcodeVersion) < 0) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("invalid microcode version"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (!(def->model = virXPathString("string(./model[1])", ctxt)) &&
|
||||
@@ -723,6 +733,10 @@ virCPUDefFormatBuf(virBufferPtr buf,
|
||||
if (formatModel && def->vendor)
|
||||
virBufferEscapeString(buf, "<vendor>%s</vendor>\n", def->vendor);
|
||||
|
||||
+ if (def->type == VIR_CPU_TYPE_HOST && def->microcodeVersion)
|
||||
+ virBufferAsprintf(buf, "<microcode version='%u'/>\n",
|
||||
+ def->microcodeVersion);
|
||||
+
|
||||
if (def->sockets && def->cores && def->threads) {
|
||||
virBufferAddLit(buf, "<topology");
|
||||
virBufferAsprintf(buf, " sockets='%u'", def->sockets);
|
||||
diff --git a/src/conf/cpu_conf.h b/src/conf/cpu_conf.h
|
||||
index b44974f47e..a30ecf8681 100644
|
||||
--- a/src/conf/cpu_conf.h
|
||||
+++ b/src/conf/cpu_conf.h
|
||||
@@ -133,6 +133,7 @@ struct _virCPUDef {
|
||||
char *vendor_id; /* vendor id returned by CPUID in the guest */
|
||||
int fallback; /* enum virCPUFallback */
|
||||
char *vendor;
|
||||
+ unsigned int microcodeVersion;
|
||||
unsigned int sockets;
|
||||
unsigned int cores;
|
||||
unsigned int threads;
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 0cb0dcacb3..41aaa61c35 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -33,6 +33,7 @@
|
||||
#include "virbuffer.h"
|
||||
#include "virendian.h"
|
||||
#include "virstring.h"
|
||||
+#include "virhostcpu.h"
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_CPU
|
||||
|
||||
@@ -153,6 +154,8 @@ struct _virCPUx86Map {
|
||||
};
|
||||
|
||||
static virCPUx86MapPtr cpuMap;
|
||||
+static unsigned int microcodeVersion;
|
||||
+
|
||||
int virCPUx86DriverOnceInit(void);
|
||||
VIR_ONCE_GLOBAL_INIT(virCPUx86Driver);
|
||||
|
||||
@@ -1392,6 +1395,8 @@ virCPUx86DriverOnceInit(void)
|
||||
if (!(cpuMap = virCPUx86LoadMap()))
|
||||
return -1;
|
||||
|
||||
+ microcodeVersion = virHostCPUGetMicrocodeVersion();
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2409,6 +2414,9 @@ virCPUx86GetHost(virCPUDefPtr cpu,
|
||||
virCPUDataPtr cpuData = NULL;
|
||||
int ret = -1;
|
||||
|
||||
+ if (virCPUx86DriverInitialize() < 0)
|
||||
+ goto cleanup;
|
||||
+
|
||||
if (!(cpuData = virCPUDataNew(archs[0])))
|
||||
goto cleanup;
|
||||
|
||||
@@ -2417,6 +2425,7 @@ virCPUx86GetHost(virCPUDefPtr cpu,
|
||||
goto cleanup;
|
||||
|
||||
ret = x86DecodeCPUData(cpu, cpuData, models, nmodels, NULL);
|
||||
+ cpu->microcodeVersion = microcodeVersion;
|
||||
|
||||
cleanup:
|
||||
virCPUx86DataFree(cpuData);
|
||||
--
|
||||
2.17.0
|
||||
|
||||
@@ -1,535 +0,0 @@
|
||||
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
|
||||
|
||||
@@ -1,142 +0,0 @@
|
||||
From ac0e85360cd8f25160b67ee9fb45663d20f82c1d Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Date: Tue, 19 Jun 2018 16:51:13 +0100
|
||||
Subject: [PATCH 17/19] cpu: add CPU features and model for indirect branch
|
||||
prediction protection
|
||||
|
||||
CVE-2017-5715
|
||||
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_map.xml | 44 ++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 44 insertions(+)
|
||||
|
||||
diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml
|
||||
index 8e7ac4973d..c31e7ce36a 100644
|
||||
--- a/src/cpu/cpu_map.xml
|
||||
+++ b/src/cpu/cpu_map.xml
|
||||
@@ -283,6 +283,9 @@
|
||||
<feature name='avx512-4fmaps'>
|
||||
<cpuid eax_in='0x07' ecx_in='0x00' edx='0x00000008'/>
|
||||
</feature>
|
||||
+ <feature name='spec-ctrl'>
|
||||
+ <cpuid eax_in='0x07' ecx_in='0x00' edx='0x04000000'/>
|
||||
+ </feature>
|
||||
|
||||
<!-- Processor Extended State Enumeration sub leaf 1 -->
|
||||
<feature name='xsaveopt'>
|
||||
@@ -411,6 +414,11 @@
|
||||
<cpuid eax_in='0x80000007' edx='0x00000100'/>
|
||||
</feature>
|
||||
|
||||
+ <!-- More AMD-specific features -->
|
||||
+ <feature name='ibpb'>
|
||||
+ <cpuid eax_in='0x80000008' ebx='0x00001000'/>
|
||||
+ </feature>
|
||||
+
|
||||
<!-- models -->
|
||||
<model name='486'>
|
||||
<feature name='fpu'/>
|
||||
@@ -857,6 +865,10 @@
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
</model>
|
||||
+ <model name='Nehalem-IBRS'>
|
||||
+ <model name='Nehalem'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ </model>
|
||||
|
||||
<model name='Westmere'>
|
||||
<signature family='6' model='44'/>
|
||||
@@ -894,6 +906,10 @@
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
</model>
|
||||
+ <model name='Westmere-IBRS'>
|
||||
+ <model name='Westmere'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ </model>
|
||||
|
||||
<model name='SandyBridge'>
|
||||
<signature family='6' model='42'/>
|
||||
@@ -937,6 +953,10 @@
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xsave'/>
|
||||
</model>
|
||||
+ <model name='SandyBridge-IBRS'>
|
||||
+ <model name='SandyBridge'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ </model>
|
||||
|
||||
<model name='IvyBridge'>
|
||||
<signature family='6' model='58'/>
|
||||
@@ -986,6 +1006,10 @@
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xsave'/>
|
||||
</model>
|
||||
+ <model name='IvyBridge-IBRS'>
|
||||
+ <model name='IvyBridge'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ </model>
|
||||
|
||||
<model name='Haswell-noTSX'>
|
||||
<signature family='6' model='60'/>
|
||||
@@ -1039,6 +1063,10 @@
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xsave'/>
|
||||
</model>
|
||||
+ <model name='Haswell-noTSX-IBRS'>
|
||||
+ <model name='Haswell-noTSX'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ </model>
|
||||
|
||||
<model name='Haswell'>
|
||||
<signature family='6' model='60'/>
|
||||
@@ -1094,6 +1122,10 @@
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xsave'/>
|
||||
</model>
|
||||
+ <model name='Haswell-IBRS'>
|
||||
+ <model name='Haswell'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ </model>
|
||||
|
||||
<model name='Broadwell-noTSX'>
|
||||
<signature family='6' model='61'/>
|
||||
@@ -1151,6 +1183,10 @@
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xsave'/>
|
||||
</model>
|
||||
+ <model name='Broadwell-noTSX-IBRS'>
|
||||
+ <model name='Broadwell-noTSX'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ </model>
|
||||
|
||||
<model name='Broadwell'>
|
||||
<signature family='6' model='61'/>
|
||||
@@ -1210,6 +1246,10 @@
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xsave'/>
|
||||
</model>
|
||||
+ <model name='Broadwell-IBRS'>
|
||||
+ <model name='Broadwell'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ </model>
|
||||
|
||||
<model name='Skylake-Client'>
|
||||
<signature family='6' model='94'/>
|
||||
@@ -1278,6 +1318,10 @@
|
||||
<feature name='xsavec'/>
|
||||
<feature name='xsaveopt'/>
|
||||
</model>
|
||||
+ <model name='Skylake-Client-IBRS'>
|
||||
+ <model name='Skylake-Client'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ </model>
|
||||
|
||||
<!-- AMD CPUs -->
|
||||
<model name='athlon'>
|
||||
--
|
||||
2.17.0
|
||||
|
||||
+198
-251
@@ -1,10 +1,12 @@
|
||||
# -*- rpm-spec -*-
|
||||
|
||||
# This spec file assumes you are building on a Fedora or RHEL version
|
||||
# that's still supported by the vendor: that means Fedora 23 or newer,
|
||||
# or RHEL 6 or newer. It may need some tweaks for other distros.
|
||||
# If neither fedora nor rhel was defined, try to guess them from dist
|
||||
%if (0%{?fedora} && 0%{?fedora} >= 23) || (0%{?rhel} && 0%{?rhel} >= 6)
|
||||
# that's still supported by the vendor. It may work on other distros
|
||||
# or versions, but no effort will be made to ensure that going forward.
|
||||
%define min_rhel 6
|
||||
%define min_fedora 26
|
||||
|
||||
%if (0%{?fedora} && 0%{?fedora} >= %{min_fedora}) || (0%{?rhel} && 0%{?rhel} >= %{min_rhel})
|
||||
%define supported_platform 1
|
||||
%else
|
||||
%define supported_platform 0
|
||||
@@ -13,8 +15,7 @@
|
||||
# Default to skipping autoreconf. Distros can change just this one line
|
||||
# (or provide a command-line override) if they backport any patches that
|
||||
# touch configure.ac or Makefile.am.
|
||||
%{!?enable_autotools:%global enable_autotools 1}
|
||||
|
||||
%{!?enable_autotools:%global enable_autotools 0}
|
||||
|
||||
# The hypervisor drivers that run in libvirtd
|
||||
%define with_xen 0%{!?_without_xen:1}
|
||||
@@ -36,7 +37,7 @@
|
||||
%define with_qemu_tcg 0
|
||||
%define qemu_kvm_arches x86_64
|
||||
%if 0%{?rhel} >= 7
|
||||
%define qemu_kvm_arches x86_64 %{power64} aarch64
|
||||
%define qemu_kvm_arches x86_64 %{power64} aarch64 s390x
|
||||
%endif
|
||||
%endif
|
||||
|
||||
@@ -72,7 +73,7 @@
|
||||
%define with_numactl 0%{!?_without_numactl:1}
|
||||
|
||||
# F25+ has zfs-fuse
|
||||
%if 0%{?fedora} >= 25
|
||||
%if 0%{?fedora}
|
||||
%define with_storage_zfs 0%{!?_without_storage_zfs:1}
|
||||
%else
|
||||
%define with_storage_zfs 0
|
||||
@@ -88,6 +89,7 @@
|
||||
%define with_libssh2 0%{!?_without_libssh2:0}
|
||||
%define with_wireshark 0%{!?_without_wireshark:0}
|
||||
%define with_libssh 0%{!?_without_libssh:0}
|
||||
%define with_bash_completion 0%{!?_without_bash_completion:0}
|
||||
%define with_pm_utils 1
|
||||
|
||||
# Finally set the OS / architecture specific special cases
|
||||
@@ -141,6 +143,10 @@
|
||||
%define with_libxl 0
|
||||
%define with_hyperv 0
|
||||
%define with_vz 0
|
||||
|
||||
%if 0%{?rhel} > 7
|
||||
%define with_lxc 0
|
||||
%endif
|
||||
%endif
|
||||
|
||||
# Fedora 17 / RHEL-7 are first where we use systemd. Although earlier
|
||||
@@ -161,7 +167,7 @@
|
||||
%endif
|
||||
|
||||
# fuse is used to provide virtualized /proc for LXC
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 7
|
||||
%if %{with_lxc} && 0%{?rhel} != 6
|
||||
%define with_fuse 0%{!?_without_fuse:1}
|
||||
%endif
|
||||
|
||||
@@ -196,6 +202,11 @@
|
||||
%define with_libssh 0%{!?_without_libssh:1}
|
||||
%endif
|
||||
|
||||
# Enable bash-completion for new enough distros
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 7
|
||||
%define with_bash_completion 0%{!?_without_bash_completion:1}
|
||||
%endif
|
||||
|
||||
|
||||
%if %{with_qemu} || %{with_lxc} || %{with_uml}
|
||||
# numad is used to manage the CPU and memory placement dynamically,
|
||||
@@ -231,21 +242,17 @@
|
||||
%define enable_werror --disable-werror
|
||||
%endif
|
||||
|
||||
%if 0%{?fedora} >= 25
|
||||
%if 0%{?fedora}
|
||||
%define tls_priority "@LIBVIRT,SYSTEM"
|
||||
%else
|
||||
%if 0%{?fedora}
|
||||
%define tls_priority "@SYSTEM"
|
||||
%else
|
||||
%define tls_priority "NORMAL"
|
||||
%endif
|
||||
%define tls_priority "NORMAL"
|
||||
%endif
|
||||
|
||||
|
||||
Summary: Library providing a simple virtualization API
|
||||
Name: libvirt
|
||||
Version: 3.7.0
|
||||
Release: 6%{?dist}%{?extra_release}
|
||||
Version: 4.1.0
|
||||
Release: 7%{?dist}%{?extra_release}
|
||||
License: LGPLv2+
|
||||
Group: Development/Libraries
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
|
||||
@@ -256,46 +263,31 @@ URL: https://libvirt.org/
|
||||
%endif
|
||||
Source: https://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.xz
|
||||
|
||||
# Fix TPM2 passthrough (bz #1486240)
|
||||
Patch0001: 0001-tpm-Use-dev-null-for-cancel-path-if-none-was-found.patch
|
||||
# Fix spice GL qemu:///system rendernode permissions (bz #1460804)
|
||||
Patch0002: 0002-security-add-MANAGER_MOUNT_NAMESPACE-flag.patch
|
||||
Patch0003: 0003-security-dac-relabel-spice-rendernode.patch
|
||||
# CVE-2017-1000256: libvirt: TLS certificate verification disabled for
|
||||
# clients (bz #1503687)
|
||||
Patch0004: 0004-qemu-ensure-TLS-clients-always-verify-the-server-cer.patch
|
||||
# Fix qemu image locking with shared disks (bz #1513447)
|
||||
Patch0005: 0005-qemu-Move-snapshot-disk-validation-functions-into-on.patch
|
||||
Patch0006: 0006-qemu-block-Add-function-to-check-if-storage-source-a.patch
|
||||
Patch0007: 0007-qemu-domain-Reject-shared-disk-access-if-backing-for.patch
|
||||
Patch0008: 0008-qemu-snapshot-Disallow-snapshot-of-unsupported-share.patch
|
||||
Patch0009: 0009-qemu-Disallow-pivot-of-shared-disks-to-unsupported-s.patch
|
||||
Patch0010: 0010-qemu-caps-Add-capability-for-share-rw-disk-option.patch
|
||||
Patch0011: 0011-qemu-command-Mark-shared-disks-as-such-in-qemu.patch
|
||||
|
||||
# CVE-2018-5748: resource exhaustion via qemuMonitorIORead() (bz #1535785)
|
||||
Patch0101: 0101-util-probe-Add-quiet-versions-of-the-PROBE-macro.patch
|
||||
Patch0102: 0102-qemu-monitor-Decrease-logging-verbosity.patch
|
||||
# CVE-2018-6764: code injection via libvirt_lxc (bz #1542815)
|
||||
Patch0103: 0103-virlog-determine-the-hostname-on-startup-CVE-2018-67.patch
|
||||
Patch0104: 0104-util-Fix-syntax-check.patch
|
||||
Patch0105: 0105-log-fix-deadlock-obtaining-hostname-related-CVE-2018.patch
|
||||
# Fix hotplug disk failure (bz #1540872)
|
||||
Patch0106: 0106-qemuDomainAttachDeviceMknodHelper-Remove-symlink-bef.patch
|
||||
# Fix test suite
|
||||
Patch0001: 0001-cpu-define-the-ssbd-CPUID-feature-bit-CVE-2018-3639.patch
|
||||
# Add new CPU features for speculative store bypass (CVE-2018-3639)
|
||||
Patch0002: 0002-tests-force-use-of-NORMAL-TLS-priority-in-test-suite.patch
|
||||
Patch0003: 0003-cpu-define-the-virt-ssbd-CPUID-feature-bit-CVE-2018-.patch
|
||||
# Fix virtlockd-admin.socket syntax (bz #1586239)
|
||||
Patch0004: 0004-lockd-fix-typo-in-virtlockd-admin.socket.patch
|
||||
# nwfilter: increase pcap buffer size to be compatible with TPACKET_V3 (bz
|
||||
# #1547237)
|
||||
Patch0107: 0107-nwfilter-increase-pcap-buffer-size-to-be-compatible-.patch
|
||||
|
||||
# Spectre / SSBD
|
||||
Patch1000: 1000-util-add-virFileReadHeaderQuiet-wrapper-around-virFi.patch
|
||||
Patch1001: 1001-cpu_x86-Copy-CPU-signature-from-ancestor.patch
|
||||
Patch1002: 1002-util-introduce-virHostCPUGetMicrocodeVersion.patch
|
||||
Patch1003: 1003-cpu_x86-Rename-virCPUx86MapInitialize.patch
|
||||
Patch1004: 1004-conf-include-x86-microcode-version-in-virsh-capabilt.patch
|
||||
Patch1005: 1005-qemu-capabilities-force-update-if-the-microcode-vers.patch
|
||||
Patch1006: 1006-cpu-add-CPU-features-and-model-for-indirect-branch-p.patch
|
||||
Patch1007: 1007-cpu-define-the-ssbd-CPUID-feature-bit-CVE-2018-3639.patch
|
||||
Patch1008: 1008-cpu-define-the-virt-ssbd-CPUID-feature-bit-CVE-2018-.patch
|
||||
Patch0005: 0005-nwfilter-increase-pcap-buffer-size-to-be-compatible-.patch
|
||||
# Fix *LookupBy* APIs hash races (bz #1621471)
|
||||
Patch0006: 0006-util-don-t-check-for-parallel-iteration-in-hash-rela.patch
|
||||
# ESX: crash when user sets autostart flags to a domain (bz #1611921)
|
||||
Patch0007: 0007-esx-Fix-double-free-and-freeing-static-strings-in-es.patch
|
||||
# Define md-clear CPUID bit (CVE-2018-12126, CVE-2018-12127, CVE-2018-12130,
|
||||
# CVE-2019-11091)
|
||||
Patch0008: 0008-cpu_x86-Do-not-cache-microcode-version.patch
|
||||
Patch0009: 0009-qemu-Don-t-cache-microcode-version.patch
|
||||
Patch0010: 0010-cputest-Add-data-for-Intel-R-Xeon-R-CPU-E3-1225-v5.patch
|
||||
Patch0011: 0011-cpu_map-Define-md-clear-CPUID-bit.patch
|
||||
Patch0012: 0012-cpu-remove-stibp-flag-from-test-data.patch
|
||||
# Fix systemd socket permissions (CVE-2019-10132)
|
||||
Patch0013: 0013-admin-reject-clients-unless-their-UID-matches-the-cu.patch
|
||||
Patch0014: 0014-locking-restrict-sockets-to-mode-0600.patch
|
||||
Patch0015: 0015-logging-restrict-sockets-to-mode-0600.patch
|
||||
|
||||
Requires: libvirt-daemon = %{version}-%{release}
|
||||
Requires: libvirt-daemon-config-network = %{version}-%{release}
|
||||
@@ -338,7 +330,7 @@ BuildRequires: libtool
|
||||
BuildRequires: /usr/bin/pod2man
|
||||
%endif
|
||||
BuildRequires: git
|
||||
%if 0%{?fedora} >= 27
|
||||
%if 0%{?fedora} >= 27 || 0%{?rhel} > 7
|
||||
BuildRequires: perl-interpreter
|
||||
%else
|
||||
BuildRequires: perl
|
||||
@@ -353,6 +345,9 @@ BuildRequires: xen-devel
|
||||
BuildRequires: libxml2-devel
|
||||
BuildRequires: libxslt
|
||||
BuildRequires: readline-devel
|
||||
%if %{with_bash_completion}
|
||||
BuildRequires: bash-completion >= 2.0
|
||||
%endif
|
||||
BuildRequires: ncurses-devel
|
||||
BuildRequires: gettext
|
||||
BuildRequires: libtasn1-devel
|
||||
@@ -487,17 +482,18 @@ BuildRequires: numad
|
||||
%endif
|
||||
|
||||
%if %{with_wireshark}
|
||||
%if 0%{fedora} >= 24
|
||||
BuildRequires: wireshark-devel >= 2.1.0
|
||||
%else
|
||||
BuildRequires: wireshark-devel >= 1.12.1
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%if %{with_libssh}
|
||||
BuildRequires: libssh-devel >= 0.7.0
|
||||
%endif
|
||||
|
||||
%if 0%{?fedora} > 27 || 0%{?rhel} > 7
|
||||
BuildRequires: rpcgen
|
||||
BuildRequires: libtirpc-devel
|
||||
%endif
|
||||
|
||||
Provides: bundled(gnulib)
|
||||
|
||||
%description
|
||||
@@ -830,7 +826,7 @@ Requires: gzip
|
||||
Requires: bzip2
|
||||
Requires: lzop
|
||||
Requires: xz
|
||||
%if 0%{?fedora} >= 24
|
||||
%if 0%{?fedora} || 0%{?rhel} > 7
|
||||
Requires: systemd-container
|
||||
%endif
|
||||
|
||||
@@ -848,7 +844,7 @@ Group: Development/Libraries
|
||||
Requires: libvirt-daemon = %{version}-%{release}
|
||||
# There really is a hard cross-driver dependency here
|
||||
Requires: libvirt-daemon-driver-network = %{version}-%{release}
|
||||
%if 0%{?fedora} >= 24
|
||||
%if 0%{?fedora} || 0%{?rhel} > 7
|
||||
Requires: systemd-container
|
||||
%endif
|
||||
|
||||
@@ -1053,6 +1049,9 @@ Requires: gnutls-utils
|
||||
# Needed for probing the power management features of the host.
|
||||
Requires: pm-utils
|
||||
%endif
|
||||
%if %{with_bash_completion}
|
||||
Requires: %{name}-bash-completion = %{version}-%{release}
|
||||
%endif
|
||||
|
||||
%description client
|
||||
The client binaries needed to access the virtualization
|
||||
@@ -1077,10 +1076,22 @@ Summary: Set of tools to control libvirt daemon
|
||||
Group: Development/Libraries
|
||||
Requires: %{name}-libs = %{version}-%{release}
|
||||
Requires: readline
|
||||
%if %{with_bash_completion}
|
||||
Requires: %{name}-bash-completion = %{version}-%{release}
|
||||
%endif
|
||||
|
||||
%description admin
|
||||
The client side utilities to control the libvirt daemon.
|
||||
|
||||
%if %{with_bash_completion}
|
||||
%package bash-completion
|
||||
Summary: Bash completion script
|
||||
Group: Development/Libraries
|
||||
|
||||
%description bash-completion
|
||||
Bash completion script stub.
|
||||
%endif
|
||||
|
||||
%if %{with_wireshark}
|
||||
%package wireshark
|
||||
Summary: Wireshark dissector plugin for libvirt RPC transactions
|
||||
@@ -1138,10 +1149,6 @@ Libvirt plugin for NSS for translating domain names into IP addresses.
|
||||
|
||||
|
||||
%prep
|
||||
%if ! %{supported_platform}
|
||||
echo "This RPM requires either Fedora >= 20 or RHEL >= 6"
|
||||
exit 1
|
||||
%endif
|
||||
|
||||
%setup -q
|
||||
|
||||
@@ -1182,6 +1189,11 @@ rm -f $PATCHLIST
|
||||
rm -rf .git
|
||||
|
||||
%build
|
||||
%if ! %{supported_platform}
|
||||
echo "This RPM requires either Fedora >= %{min_fedora} or RHEL >= %{min_rhel}"
|
||||
exit 1
|
||||
%endif
|
||||
|
||||
%if %{with_xen}
|
||||
%define arg_xen --with-xen
|
||||
%else
|
||||
@@ -1202,8 +1214,10 @@ rm -rf .git
|
||||
|
||||
%if %{with_lxc}
|
||||
%define arg_lxc --with-lxc
|
||||
%define arg_login_shell --with-login-shell
|
||||
%else
|
||||
%define arg_lxc --without-lxc
|
||||
%define arg_login_shell --without-login-shell
|
||||
%endif
|
||||
|
||||
%if %{with_vbox}
|
||||
@@ -1346,6 +1360,8 @@ rm -rf .git
|
||||
|
||||
# place macros above and build commands below this comment
|
||||
|
||||
export SOURCE_DATE_EPOCH=$(stat --printf='%Y' %{_specdir}/%{name}.spec)
|
||||
|
||||
%if 0%{?enable_autotools}
|
||||
autoreconf -if
|
||||
%endif
|
||||
@@ -1411,19 +1427,22 @@ rm -f po/stamp-po
|
||||
%{?arg_loader_nvram} \
|
||||
%{?enable_werror} \
|
||||
--enable-expensive-tests \
|
||||
%{arg_init_script}
|
||||
make %{?_smp_mflags}
|
||||
%{arg_init_script} \
|
||||
%{?arg_login_shell}
|
||||
make %{?_smp_mflags} V=1
|
||||
gzip -9 ChangeLog
|
||||
|
||||
%install
|
||||
rm -fr %{buildroot}
|
||||
|
||||
export SOURCE_DATE_EPOCH=$(stat --printf='%Y' %{_specdir}/%{name}.spec)
|
||||
|
||||
# Avoid using makeinstall macro as it changes prefixes rather than setting
|
||||
# DESTDIR. Newer make_install macro would be better but it's not available
|
||||
# on RHEL 5, thus we need to expand it here.
|
||||
make %{?_smp_mflags} install DESTDIR=%{?buildroot} SYSTEMD_UNIT_DIR=%{_unitdir}
|
||||
make %{?_smp_mflags} install DESTDIR=%{?buildroot} SYSTEMD_UNIT_DIR=%{_unitdir} V=1
|
||||
|
||||
make %{?_smp_mflags} -C examples distclean
|
||||
make %{?_smp_mflags} -C examples distclean V=1
|
||||
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/*.a
|
||||
@@ -1530,13 +1549,17 @@ exit 0
|
||||
|
||||
%if %{with_systemd}
|
||||
%if %{with_systemd_macros}
|
||||
%systemd_post virtlockd.socket virtlogd.socket libvirtd.service
|
||||
%systemd_post virtlockd.socket virtlockd-admin.socket
|
||||
%systemd_post virtlogd.socket virtlogd-admin.socket
|
||||
%systemd_post libvirtd.service
|
||||
%else
|
||||
if [ $1 -eq 1 ] ; then
|
||||
# Initial installation
|
||||
/bin/systemctl enable \
|
||||
virtlockd.socket \
|
||||
virtlockd-admin.socket \
|
||||
virtlogd.socket \
|
||||
virtlogd-admin.socket \
|
||||
libvirtd.service >/dev/null 2>&1 || :
|
||||
fi
|
||||
%endif
|
||||
@@ -1556,24 +1579,34 @@ fi
|
||||
/sbin/chkconfig --add virtlockd
|
||||
%endif
|
||||
|
||||
# request daemon restart in posttrans
|
||||
mkdir -p %{_localstatedir}/lib/rpm-state/libvirt || :
|
||||
touch %{_localstatedir}/lib/rpm-state/libvirt/restart || :
|
||||
|
||||
%preun daemon
|
||||
%if %{with_systemd}
|
||||
%if %{with_systemd_macros}
|
||||
%systemd_preun libvirtd.service virtlogd.socket virtlogd.service virtlockd.socket virtlockd.service
|
||||
%systemd_preun libvirtd.service
|
||||
%systemd_preun virtlogd.socket virtlogd-admin.socket virtlogd.service
|
||||
%systemd_preun virtlockd.socket virtlockd-admin.socket virtlockd.service
|
||||
%else
|
||||
if [ $1 -eq 0 ] ; then
|
||||
# Package removal, not upgrade
|
||||
/bin/systemctl --no-reload disable \
|
||||
libvirtd.service \
|
||||
virtlogd.socket \
|
||||
virtlogd-admin.socket \
|
||||
virtlogd.service \
|
||||
virtlockd.socket \
|
||||
virtlockd-admin.socket \
|
||||
virtlockd.service > /dev/null 2>&1 || :
|
||||
/bin/systemctl stop \
|
||||
libvirtd.service \
|
||||
virtlogd.socket \
|
||||
virtlogd-admin.socket \
|
||||
virtlogd.service \
|
||||
virtlockd.socket \
|
||||
virtlockd-admin.socket \
|
||||
virtlockd.service > /dev/null 2>&1 || :
|
||||
fi
|
||||
%endif
|
||||
@@ -1594,23 +1627,11 @@ fi
|
||||
if [ $1 -ge 1 ] ; then
|
||||
/bin/systemctl reload-or-try-restart virtlockd.service >/dev/null 2>&1 || :
|
||||
/bin/systemctl reload-or-try-restart virtlogd.service >/dev/null 2>&1 || :
|
||||
/bin/systemctl try-restart libvirtd.service >/dev/null 2>&1 || :
|
||||
fi
|
||||
%else
|
||||
if [ $1 -ge 1 ]; then
|
||||
/sbin/service virtlockd reload > /dev/null 2>&1 || :
|
||||
/sbin/service virtlogd reload > /dev/null 2>&1 || :
|
||||
/sbin/service libvirtd condrestart > /dev/null 2>&1
|
||||
fi
|
||||
%endif
|
||||
|
||||
%if %{with_systemd}
|
||||
%else
|
||||
%triggerpostun daemon -- libvirt-daemon < 1.2.1
|
||||
if [ "$1" -ge "1" ]; then
|
||||
/sbin/service virtlockd reload > /dev/null 2>&1 || :
|
||||
/sbin/service virtlogd reload > /dev/null 2>&1 || :
|
||||
/sbin/service libvirtd condrestart > /dev/null 2>&1
|
||||
fi
|
||||
%endif
|
||||
|
||||
@@ -1621,18 +1642,30 @@ fi
|
||||
%triggerpostun daemon -- libvirt-daemon < 1.3.0
|
||||
if [ $1 -ge 1 ] ; then
|
||||
%if %{with_systemd}
|
||||
/bin/systemctl is-enabled libvirtd.service 1>/dev/null 2>&1 &&
|
||||
/bin/systemctl enable virtlogd.socket || :
|
||||
/bin/systemctl is-active libvirtd.service 1>/dev/null 2>&1 &&
|
||||
/bin/systemctl start virtlogd.socket || :
|
||||
/bin/systemctl is-enabled libvirtd.service 1>/dev/null 2>&1 &&
|
||||
/bin/systemctl enable virtlogd.socket virtlogd-admin.socket || :
|
||||
/bin/systemctl is-active libvirtd.service 1>/dev/null 2>&1 &&
|
||||
/bin/systemctl start virtlogd.socket virtlogd-admin.socket || :
|
||||
%else
|
||||
/sbin/chkconfig libvirtd 1>/dev/null 2>&1 &&
|
||||
/sbin/chkconfig virtlogd on || :
|
||||
/sbin/service libvirtd status 1>/dev/null 2>&1 &&
|
||||
/sbin/service virtlogd start || :
|
||||
/sbin/chkconfig libvirtd 1>/dev/null 2>&1 &&
|
||||
/sbin/chkconfig virtlogd on || :
|
||||
/sbin/service libvirtd status 1>/dev/null 2>&1 &&
|
||||
/sbin/service virtlogd start || :
|
||||
/sbin/service virtlockd reload > /dev/null 2>&1 || :
|
||||
/sbin/service virtlogd reload > /dev/null 2>&1 || :
|
||||
%endif
|
||||
fi
|
||||
|
||||
%posttrans daemon
|
||||
if [ -f %{_localstatedir}/lib/rpm-state/libvirt/restart ]; then
|
||||
%if %{with_systemd}
|
||||
/bin/systemctl try-restart libvirtd.service >/dev/null 2>&1 || :
|
||||
%else
|
||||
/sbin/service libvirtd condrestart > /dev/null 2>&1 || :
|
||||
%endif
|
||||
fi
|
||||
rm -rf %{_localstatedir}/lib/rpm-state/libvirt || :
|
||||
|
||||
%post daemon-config-network
|
||||
if test $1 -eq 1 && test ! -f %{_sysconfdir}/libvirt/qemu/networks/default.xml ; then
|
||||
# see if the network used by default network creates a conflict,
|
||||
@@ -1671,23 +1704,35 @@ if test $1 -eq 1 && test ! -f %{_sysconfdir}/libvirt/qemu/networks/default.xml ;
|
||||
ln -s ../default.xml %{_sysconfdir}/libvirt/qemu/networks/autostart/default.xml
|
||||
|
||||
# Make sure libvirt picks up the new network defininiton
|
||||
mkdir -p %{_localstatedir}/lib/rpm-state/libvirt || :
|
||||
touch %{_localstatedir}/lib/rpm-state/libvirt/restart || :
|
||||
fi
|
||||
|
||||
%posttrans daemon-config-network
|
||||
if [ -f %{_localstatedir}/lib/rpm-state/libvirt/restart ]; then
|
||||
%if %{with_systemd}
|
||||
/bin/systemctl try-restart libvirtd.service >/dev/null 2>&1 ||:
|
||||
/bin/systemctl try-restart libvirtd.service >/dev/null 2>&1 || :
|
||||
%else
|
||||
/sbin/service libvirtd condrestart > /dev/null 2>&1 || :
|
||||
%endif
|
||||
|
||||
fi
|
||||
|
||||
rm -rf %{_localstatedir}/lib/rpm-state/libvirt || :
|
||||
|
||||
%post daemon-config-nwfilter
|
||||
cp %{_datadir}/libvirt/nwfilter/*.xml %{_sysconfdir}/libvirt/nwfilter/
|
||||
# Make sure libvirt picks up the new nwfilter defininitons
|
||||
mkdir -p %{_localstatedir}/lib/rpm-state/libvirt || :
|
||||
touch %{_localstatedir}/lib/rpm-state/libvirt/restart || :
|
||||
|
||||
%posttrans daemon-config-nwfilter
|
||||
if [ -f %{_localstatedir}/lib/rpm-state/libvirt/restart ]; then
|
||||
%if %{with_systemd}
|
||||
/bin/systemctl try-restart libvirtd.service >/dev/null 2>&1 ||:
|
||||
/bin/systemctl try-restart libvirtd.service >/dev/null 2>&1 || :
|
||||
%else
|
||||
/sbin/service libvirtd condrestart > /dev/null 2>&1 || :
|
||||
%endif
|
||||
fi
|
||||
rm -rf %{_localstatedir}/lib/rpm-state/libvirt || :
|
||||
|
||||
|
||||
%if %{with_systemd}
|
||||
@@ -1777,7 +1822,7 @@ exit 0
|
||||
%files
|
||||
|
||||
%files docs
|
||||
%doc AUTHORS ChangeLog.gz NEWS README TODO
|
||||
%doc AUTHORS ChangeLog.gz NEWS README README.md
|
||||
%doc libvirt-docs/*
|
||||
|
||||
# API docs
|
||||
@@ -1807,14 +1852,15 @@ exit 0
|
||||
%{_unitdir}/virt-guest-shutdown.target
|
||||
%{_unitdir}/virtlogd.service
|
||||
%{_unitdir}/virtlogd.socket
|
||||
%{_unitdir}/virtlogd-admin.socket
|
||||
%{_unitdir}/virtlockd.service
|
||||
%{_unitdir}/virtlockd.socket
|
||||
%{_unitdir}/virtlockd-admin.socket
|
||||
%else
|
||||
%{_sysconfdir}/rc.d/init.d/libvirtd
|
||||
%{_sysconfdir}/rc.d/init.d/virtlogd
|
||||
%{_sysconfdir}/rc.d/init.d/virtlockd
|
||||
%endif
|
||||
%doc daemon/libvirtd.upstart
|
||||
%config(noreplace) %{_sysconfdir}/sysconfig/libvirtd
|
||||
%config(noreplace) %{_sysconfdir}/sysconfig/virtlogd
|
||||
%config(noreplace) %{_sysconfdir}/sysconfig/virtlockd
|
||||
@@ -1834,6 +1880,8 @@ exit 0
|
||||
%dir %attr(0711, root, root) %{_localstatedir}/cache/libvirt/
|
||||
|
||||
|
||||
%dir %attr(0755, root, root) %{_libdir}/libvirt/
|
||||
%dir %attr(0755, root, root) %{_libdir}/libvirt/connection-driver/
|
||||
%dir %attr(0755, root, root) %{_libdir}/libvirt/lock-driver
|
||||
%attr(0755, root, root) %{_libdir}/libvirt/lock-driver/lockd.so
|
||||
|
||||
@@ -2058,6 +2106,10 @@ exit 0
|
||||
%{_datadir}/systemtap/tapset/libvirt_qemu_probes*.stp
|
||||
%{_datadir}/systemtap/tapset/libvirt_functions.stp
|
||||
|
||||
%if %{with_bash_completion}
|
||||
%{_datadir}/bash-completion/completions/virsh
|
||||
%endif
|
||||
|
||||
|
||||
%if %{with_systemd}
|
||||
%{_unitdir}/libvirt-guests.service
|
||||
@@ -2068,7 +2120,9 @@ exit 0
|
||||
%attr(0755, root, root) %{_libexecdir}/libvirt-guests.sh
|
||||
|
||||
%files libs -f %{name}.lang
|
||||
%doc COPYING COPYING.LESSER
|
||||
# RHEL6 doesn't have 'license' macro
|
||||
%{!?_licensedir:%global license %%doc}
|
||||
%license COPYING COPYING.LESSER
|
||||
%config(noreplace) %{_sysconfdir}/libvirt/libvirt.conf
|
||||
%config(noreplace) %{_sysconfdir}/libvirt/libvirt-admin.conf
|
||||
%{_libdir}/libvirt.so.*
|
||||
@@ -2105,7 +2159,14 @@ exit 0
|
||||
%files admin
|
||||
%{_mandir}/man1/virt-admin.1*
|
||||
%{_bindir}/virt-admin
|
||||
%if %{with_bash_completion}
|
||||
%{_datadir}/bash-completion/completions/virt-admin
|
||||
%endif
|
||||
|
||||
%if %{with_bash_completion}
|
||||
%files bash-completion
|
||||
%{_datadir}/bash-completion/completions/vsh
|
||||
%endif
|
||||
|
||||
%if %{with_wireshark}
|
||||
%files wireshark
|
||||
@@ -2161,26 +2222,50 @@ exit 0
|
||||
|
||||
|
||||
%changelog
|
||||
* Tue Jul 03 2018 Cole Robinson <crobinso@redhat.com> - 3.7.0-6
|
||||
* Tue May 21 2019 Daniel P. Berrangé <berrange@redhat.com> - 4.1.0-7
|
||||
- Fix systemd socket permissions
|
||||
- Resolves: rhbz #1712498 (CVE-2019-10132)
|
||||
|
||||
* Tue May 14 2019 Daniel P. Berrangé <berrange@redhat.com> - 4.1.0-6
|
||||
- Define md-clear CPUID bit
|
||||
- Resolves: rhbz #1709977 (CVE-2018-12126), rhbz #1709979 (CVE-2018-12127),
|
||||
rhbz #1709997 (CVE-2018-12130), rhbz #1709984 (CVE-2019-11091)
|
||||
|
||||
* Thu Aug 23 2018 Cole Robinson <crobinso@redhat.com> - 4.1.0-5
|
||||
- Fix *LookupBy* APIs hash races (bz #1621471)
|
||||
- ESX: crash when user sets autostart flags to a domain (bz #1611921)
|
||||
|
||||
* Tue Jul 03 2018 Cole Robinson <crobinso@redhat.com> - 4.1.0-4
|
||||
- Fix virtlockd-admin.socket syntax (bz #1586239)
|
||||
- nwfilter: increase pcap buffer size to be compatible with TPACKET_V3 (bz
|
||||
#1547237)
|
||||
|
||||
* Wed Jun 20 2018 Daniel P. Berrangé <berrange@redhat.com> - 3.7.0-5
|
||||
- Add new CPU features for CVE-2017-5715 and CVE-2018-3639
|
||||
* Mon Jun 18 2018 Daniel P. Berrangé <berrange@redhat.com> - 4.1.0-3
|
||||
- Add new CPU features for speculative store bypass (CVE-2018-3639)
|
||||
|
||||
* Tue Feb 13 2018 Cole Robinson <crobinso@redhat.com> - 3.7.0-4
|
||||
- CVE-2018-5748: resource exhaustion via qemuMonitorIORead() (bz #1535785)
|
||||
- CVE-2018-6764: code injection via libvirt_lxc (bz #1542815)
|
||||
- Fix hotplug disk failure (bz #1540872)
|
||||
* Wed Mar 21 2018 Daniel P. Berrangé <berrange@redhat.com> - 4.1.0-2
|
||||
- Fix systemd macro argument with line continuations (rhbz#1558648)
|
||||
|
||||
* Mon Dec 04 2017 Cole Robinson <crobinso@redhat.com> - 3.7.0-3
|
||||
- CVE-2017-1000256: libvirt: TLS certificate verification disabled for
|
||||
clients (bz #1503687)
|
||||
- Fix qemu image locking with shared disks (bz #1513447)
|
||||
* Mon Mar 5 2018 Daniel Berrange <berrange@redhat.com> - 4.1.0-1
|
||||
- Rebase to version 4.1.0
|
||||
|
||||
* Fri Sep 15 2017 Cole Robinson <crobinso@redhat.com> - 3.7.0-2
|
||||
- Fix TPM2 passthrough (bz #1486240)
|
||||
- Fix spice GL qemu:///system rendernode permissions (bz #1460804)
|
||||
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 4.0.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
|
||||
|
||||
* Fri Jan 19 2018 Daniel P. Berrange <berrange@redhat.com> - 4.0.0-1
|
||||
- Rebase to version 4.0.0
|
||||
|
||||
* Wed Dec 20 2017 Cole Robinson <crobinso@redhat.com> - 3.10.0-2
|
||||
- Rebuild for xen 4.10
|
||||
|
||||
* Tue Dec 5 2017 Daniel P. Berrange <berrange@redhat.com> - 3.10.0-1
|
||||
- Rebase to version 3.10.0
|
||||
|
||||
* Fri Nov 3 2017 Daniel P. Berrange <berrange@redhat.com> - 3.9.0-1
|
||||
- Rebase to version 3.9.0
|
||||
|
||||
* Wed Oct 4 2017 Daniel P. Berrange <berrange@redhat.com> - 3.8.0-1
|
||||
- Rebase to version 3.8.0
|
||||
|
||||
* Mon Sep 4 2017 Daniel P. Berrange <berrange@redhat.com> - 3.7.0-1
|
||||
- Rebase to version 3.7.0
|
||||
@@ -2217,141 +2302,3 @@ exit 0
|
||||
|
||||
* Thu Jan 19 2017 Daniel P. Berrange <berrange@redhat.com> - 3.0.0-1
|
||||
- Rebase to version 3.0.0
|
||||
|
||||
* Thu Jan 12 2017 Igor Gnatenko <ignatenko@redhat.com> - 2.5.0-3
|
||||
- Rebuild for readline 7.x
|
||||
|
||||
* Thu Dec 8 2016 Daniel P. Berrange <berrange@redhat.com> - 2.5.0-2
|
||||
- Rebuild to pick up new libxen* soname
|
||||
|
||||
* Mon Dec 5 2016 Daniel P. Berrange <berrange@redhat.com> - 2.5.0-1
|
||||
- Rebase to version 2.5.0
|
||||
|
||||
* Wed Nov 2 2016 Daniel P. Berrange <berrange@redhat.com> - 2.4.0-1
|
||||
- Rebase to version 2.4.0
|
||||
|
||||
* Thu Oct 6 2016 Daniel P. Berrange <berrange@redhat.com> - 2.3.0-1
|
||||
- Rebase to version 2.3.0
|
||||
|
||||
* Mon Sep 5 2016 Daniel P. Berrange <berrange@redhat.com> - 2.2.0-1
|
||||
- Rebase to version 2.2.0
|
||||
|
||||
* Tue Aug 2 2016 Daniel P. Berrange <berrange@redhat.com> - 2.1.0-1
|
||||
- Rebase to version 2.1.0
|
||||
|
||||
* Sat Jul 23 2016 Richard W.M. Jones <rjones@redhat.com> - 2.0.0-2
|
||||
- Rebuild to attempt to fix 'nothing provides libxenctrl.so.4.6()(64bit) needed
|
||||
by libvirt-daemon-2.0.0-1.fc25.x86_64'
|
||||
|
||||
* Fri Jul 1 2016 Daniel P. Berrange <berrange@redhat.com> - 2.0.0-1
|
||||
- Rebase to version 2.0.0
|
||||
- Temporarily disable wireshark plugin due to broken wireshark headers (rhbz #1351984)
|
||||
|
||||
* Mon Jun 13 2016 Richard W.M. Jones <rjones@redhat.com> - 1.3.5-2
|
||||
- Rebuild against new glibc
|
||||
(see https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/VUOTESHSWFRCYPXIVG6BSMAUITS7QCK2/).
|
||||
|
||||
* Mon Jun 6 2016 Daniel P. Berrange <berrange@redhat.com> - 1.3.5-1
|
||||
- Rebase to version 1.3.5
|
||||
- Pull in refactored, simplified spec file from upstream
|
||||
|
||||
* Fri May 20 2016 Cole Robinson <crobinso@redhat.com> - 1.3.4-2
|
||||
- Fix libxl video config via virt-install (bz #1334557)
|
||||
- Advertise fedora edk2 firmware builds to apps (bz #1335395)
|
||||
|
||||
* Mon May 02 2016 Cole Robinson <crobinso@redhat.com> - 1.3.4-1
|
||||
- Rebased to version 1.3.4
|
||||
|
||||
* Tue Apr 19 2016 Cole Robinson <crobinso@redhat.com> - 1.3.3-3
|
||||
- Fix 200ms performance problem when waiting for monitor socket of new domains.
|
||||
|
||||
* Thu Apr 14 2016 Cole Robinson <crobinso@redhat.com> - 1.3.3-2
|
||||
- libvirt assigns same address to two PCI devices (bz #1325085)
|
||||
- Fix build with -Werror
|
||||
|
||||
* Thu Apr 07 2016 Cole Robinson <crobinso@redhat.com> - 1.3.3-1
|
||||
- Rebased to version 1.3.3
|
||||
|
||||
* Thu Mar 17 2016 Cole Robinson <crobinso@redhat.com> - 1.3.2-3
|
||||
- Fix qemu:///session disconnect after 30 seconds
|
||||
- Fix 'permission denied' errors trying to unlink disk images (bz #1289327)
|
||||
- Fix qemu:///session connect race failures (bz #1271183)
|
||||
- driver: log missing modules as INFO, not WARN (bz #1274849)
|
||||
|
||||
* Wed Mar 9 2016 Richard W.M. Jones <rjones@redhat.com> - 1.3.2-2
|
||||
- Add fix for RHBZ#1315606.
|
||||
|
||||
* Tue Mar 1 2016 Daniel Berrange <berrange@redhat.com> - 1.3.2-1
|
||||
- Update to 1.3.2 release
|
||||
|
||||
* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.1-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
|
||||
|
||||
* Tue Jan 19 2016 Daniel Berrange <berrange@redhat.com> - 1.3.1-1
|
||||
- Update to 1.3.1 release
|
||||
|
||||
* Wed Dec 9 2015 Daniel Berrange <berrange@redhat.com> - 1.3.0-1
|
||||
- Update to 1.3.0 release
|
||||
|
||||
* Wed Nov 11 2015 Cole Robinson <crobinso@redhat.com> - 1.2.21-1
|
||||
- Update to 1.2.21 release
|
||||
|
||||
* Sun Oct 11 2015 Cole Robinson <crobinso@redhat.com> - 1.2.20-2
|
||||
- Rebuild for xen 4.6
|
||||
|
||||
* Fri Oct 2 2015 Daniel P. Berrange <berrange@redhat.com> - 1.2.20-1
|
||||
- Update to 1.2.20 release
|
||||
|
||||
* Wed Sep 2 2015 Daniel P. Berrange <berrange@redhat.com> - 1.2.19-1
|
||||
- Update to 1.2.19 release
|
||||
|
||||
* Tue Aug 4 2015 Daniel P. Berrange <berrange@redhat.com> - 1.2.18-1
|
||||
- Update to 1.2.18 release
|
||||
|
||||
* Wed Jul 29 2015 Richard W.M. Jones <rjones@redhat.com> - 1.2.17-2
|
||||
- Fix 'Cannot write data: Broken pipe [code=38 domain=7]' (RHBZ#1247746).
|
||||
|
||||
* Tue Jul 14 2015 Cole Robinson <crobinso@redhat.com> - 1.2.17-1
|
||||
- numerous improvements and refactoring of the parallels driver
|
||||
- hardening of vcpu code
|
||||
- hardening of migration code
|
||||
- a lot of improvement and bug fixes
|
||||
|
||||
* Sun Jul 12 2015 Peter Robinson <pbrobinson@fedoraproject.org> 1.2.16-3
|
||||
- Rebuild (aarch64)
|
||||
|
||||
* Tue Jun 16 2015 Daniel P. Berrange <berrange@redhat.com> - 1.2.16-2
|
||||
- Rebuild for libwsman soname bump
|
||||
|
||||
* Mon Jun 01 2015 Daniel P. Berrange <berrange@redhat.com> - 1.2.16-1
|
||||
- Update to 1.2.16 release
|
||||
|
||||
* Thu May 07 2015 Richard W.M. Jones <rjones@redhat.com> - 1.2.15-2
|
||||
- Add Cole Robinson's patch to fix arch selection (bz# 1219198, bz#1219191)
|
||||
|
||||
* Mon May 04 2015 Cole Robinson <crobinso@redhat.com> - 1.2.15-1
|
||||
- Rebased to version 1.2.15
|
||||
|
||||
* Wed Apr 15 2015 Cole Robinson <crobinso@redhat.com> - 1.2.14-2
|
||||
- Fix LXC domain startup (bz #1210397)
|
||||
- Fix race starting multiple session daemons (bz #1200149)
|
||||
- Fix change-media success messages
|
||||
- Strip invalid control codes from XML (bz #1066564, bz #1184131)
|
||||
|
||||
* Thu Apr 02 2015 Cole Robinson <crobinso@redhat.com> - 1.2.14-1
|
||||
- Rebased to version 1.2.14
|
||||
|
||||
* Tue Mar 10 2015 Cole Robinson <crobinso@redhat.com> - 1.2.13-2
|
||||
- Fix connecting to qemu:///session (bz #1198244)
|
||||
|
||||
* Mon Mar 02 2015 Cole Robinson <crobinso@redhat.com> - 1.2.13-1
|
||||
- Rebased to version 1.2.13
|
||||
- lot of improvements around NUMA code
|
||||
- a lot of improvement and bug fixes
|
||||
|
||||
* Tue Feb 3 2015 Daniel P. Berrange <berrange@redhat.com> - 1.2.12-2
|
||||
- Rebuild for changed xen soname
|
||||
|
||||
* Tue Jan 27 2015 Daniel P. Berrange <berrange@redhat.com> - 1.2.12-1
|
||||
- Update to 1.2.12 release
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
SHA512 (libvirt-3.7.0.tar.xz) = b3f7021ef4c6954430f8fa503f0c49e3df4f662b228cb631ba2c2139ecec2307dde6cec05037cc28663e82ab1001296c20c5c68acd183cd364dd484a7746f498
|
||||
SHA512 (libvirt-4.1.0.tar.xz) = 62d1a228adf3270cc6defe3cbf92dac8c4ce2c434c4d97219571ccef799a4f6304cfd1ba9938338356641285f53ac71145d7b398523021c5ea1dc8e3d49cf894
|
||||
|
||||
Reference in New Issue
Block a user