Compare commits

..

5 Commits

Author SHA1 Message Date
Cole Robinson 90207a429e Enable ZFS storage driver (bz #1471912)
Don't use cgroup mount points from /proc/mounts that are hidden (bz #1470593)
disk driver name=... should be optional (bz #1473091)
2017-08-04 16:40:24 -04:00
Cole Robinson ea04e2dddf Drop wireshark workaround 2017-06-14 11:09:25 -04:00
Cole Robinson c207216544 Fix padding of encrypted data (bz #1452622) 2017-05-30 19:18:23 -04:00
Cole Robinson 598f426d2a Rebased to version 2.2.1
Fix spice port allocation collisions (bz #1390413)
Fix rpm validation of nwfilter config files (bz #1431581)
Tie virtlogd lifecycle to libvirtd.service (bz #1435855)
Fix double free when undefining storage pool (bz #1436400)
Fix crash in qemuDomainSecretDiskPrepare (bz #1438070)
2017-05-10 18:01:32 -04:00
Cole Robinson 997d61802f Fix libvirtd endless loop when starting network with multiple IPs (bz #1393975) 2016-11-14 15:59:56 -05:00
11 changed files with 2358 additions and 1825 deletions
-31
View File
@@ -1,31 +0,0 @@
[suppress_function]
symbol_version_regexp = LIBVIRT_PRIVATE.*
soname_regexp = libvirt\\.so.*
[suppress_function]
symbol_version_regexp = LIBVIRT_ADMIN_PRIVATE.*
soname_regexp = libvirt-admin\\.so.*
[suppress_variable]
symbol_version_regexp = LIBVIRT_PRIVATE.*
soname_regexp = libvirt\\.so.*
[suppress_variable]
symbol_version_regexp = LIBVIRT_ADMIN_PRIVATE.*
soname_regexp = libvirt-admin\\.so.*
[suppress_function]
symbol_version_regexp = .*
soname_regexp = libvirt_storage_.*\\.so.*
[suppress_variable]
symbol_version_regexp = .*
soname_regexp = libvirt_storage_.*\\.so.*
[suppress_function]
symbol_version_regexp = .*
soname_regexp = libvirt_driver_.*\\.so.*
[suppress_variable]
symbol_version_regexp = .*
soname_regexp = libvirt_driver_.*\\.so.*
+55
View File
@@ -0,0 +1,55 @@
From: "Daniel P. Berrange" <berrange@redhat.com>
Date: Tue, 2 May 2017 11:32:43 +0100
Subject: [PATCH] Fix padding of encrypted data
If we are encoding a block of data that is 16 bytes in length,
we cannot leave it as 16 bytes, we must pad it out to the next
block boundary, 32 bytes. Without this padding, the decoder will
incorrectly treat the last byte of plain text as the padding
length, as it can't distinguish padded from non-padded data.
The problem exhibited itself when using a 16 byte passphrase
for a LUKS volume
$ virsh secret-set-value 55806c7d-8e93-456f-829b-607d8c198367 \
$(echo -n 1234567812345678 | base64)
Secret value set
$ virsh start demo
error: Failed to start domain demo
error: internal error: process exited while connecting to monitor: >>>>>>>>>>Len 16
2017-05-02T10:35:40.016390Z qemu-system-x86_64: -object \
secret,id=virtio-disk1-luks-secret0,data=SEtNi5vDUeyseMKHwc1c1Q==,\
keyid=masterKey0,iv=zm7apUB1A6dPcH53VW960Q==,format=base64: \
Incorrect number of padding bytes (56) found on decrypted data
Notice how the padding '56' corresponds to the ordinal value of
the character '8'.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 71890992daf37ec78b00b4ce873369421dc99731)
---
src/util/vircrypto.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/util/vircrypto.c b/src/util/vircrypto.c
index 03410a1a4..8f1e0b7b7 100644
--- a/src/util/vircrypto.c
+++ b/src/util/vircrypto.c
@@ -152,8 +152,14 @@ virCryptoEncryptDataAESgnutls(gnutls_cipher_algorithm_t gnutls_enc_alg,
uint8_t *ciphertext;
size_t ciphertextlen;
- /* Allocate a padded buffer, copy in the data */
- ciphertextlen = VIR_ROUND_UP(datalen, 16);
+ /* Allocate a padded buffer, copy in the data.
+ *
+ * NB, we must *always* have at least 1 byte of
+ * padding - we can't skip it on multiples of
+ * 16, otherwise decoder can't distinguish padded
+ * data from non-padded data. Hence datalen + 1
+ */
+ ciphertextlen = VIR_ROUND_UP(datalen + 1, 16);
if (VIR_ALLOC_N(ciphertext, ciphertextlen) < 0)
return -1;
memcpy(ciphertext, data, datalen);
@@ -1,35 +0,0 @@
From 9493c9b79dc541ec9e0fd73c6d87bdf8d30aaa90 Mon Sep 17 00:00:00 2001
From: Cole Robinson <crobinso@redhat.com>
Date: Mon, 1 Aug 2022 15:20:38 -0400
Subject: [PATCH] lxc: containter: fix build with glibc 2.36
Content-type: text/plain
With glibc 2.36, sys/mount.h and linux/mount.h conflict:
https://sourceware.org/glibc/wiki/Release/2.36#Usage_of_.3Clinux.2Fmount.h.3E_and_.3Csys.2Fmount.h.3E
lxc_container.c imports sys/mount.h and linux/fs.h, which pulls in
linux/mount.h.
linux/fs.h isn't required here though. glibc sys/mount.h has had
MS_MOVE since 2.12 in 2010
Reviewed-by: Erik Skultety <eskultet@redhat.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
---
src/lxc/lxc_container.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c
index b5278831da..a5401c2186 100644
--- a/src/lxc/lxc_container.c
+++ b/src/lxc/lxc_container.c
@@ -33,9 +33,6 @@
/* Yes, we want linux private one, for _syscall2() macro */
#include <linux/unistd.h>
-/* For MS_MOVE */
-#include <linux/fs.h>
-
#if WITH_CAPNG
# include <cap-ng.h>
#endif
@@ -1,239 +0,0 @@
From 99b40587e8cd83a136d94e208d32a80be76dc22a Mon Sep 17 00:00:00 2001
Message-Id: <99b40587e8cd83a136d94e208d32a80be76dc22a.1666875466.git.crobinso@redhat.com>
From: Cole Robinson <crobinso@redhat.com>
Date: Thu, 27 Oct 2022 08:51:25 -0400
Subject: [PATCH] tests: Fix libxlxml2domconfigtest with latest xen
Content-type: text/plain
shadow_memkb is populated from a libxl API call, and the value can
change. For example:
https://xenbits.xen.org/gitweb/?p=xen.git;a=commit;h=2c992810854a15b41be920519ce83a4a328d5168
Mock libxl_get_required_shadow_memory to give consistent output
Signed-off-by: Cole Robinson <crobinso@redhat.com>
---
tests/libxlmock.c | 11 +++++++++++
tests/libxlxml2domconfigdata/basic-hvm.json | 2 +-
tests/libxlxml2domconfigdata/basic-pv.json | 2 +-
tests/libxlxml2domconfigdata/basic-pvh.json | 2 +-
tests/libxlxml2domconfigdata/cpu-shares-hvm.json | 2 +-
tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json | 2 +-
.../fullvirt-cpuid-legacy-nest.json | 2 +-
tests/libxlxml2domconfigdata/fullvirt-cpuid.json | 2 +-
.../libxlxml2domconfigdata/max-eventchannels-hvm.json | 2 +-
tests/libxlxml2domconfigdata/max-gntframes-hvm.json | 2 +-
tests/libxlxml2domconfigdata/moredevs-hvm.json | 2 +-
tests/libxlxml2domconfigdata/multiple-ip.json | 2 +-
tests/libxlxml2domconfigdata/variable-clock-hvm.json | 2 +-
.../libxlxml2domconfigdata/vnuma-hvm-legacy-nest.json | 2 +-
tests/libxlxml2domconfigdata/vnuma-hvm.json | 2 +-
15 files changed, 25 insertions(+), 14 deletions(-)
diff --git a/tests/libxlmock.c b/tests/libxlmock.c
index 0e4bf7df52..4754597e5b 100644
--- a/tests/libxlmock.c
+++ b/tests/libxlmock.c
@@ -109,6 +109,17 @@ VIR_MOCK_STUB_RET_ARGS(bind,
const struct sockaddr *, addr,
socklen_t, addrlen)
+VIR_MOCK_IMPL_RET_ARGS(libxl_get_required_shadow_memory,
+ unsigned long,
+ unsigned long, maxmem_kb,
+ unsigned int, smp_cpus)
+{
+ /* silence gcc warning about unused function */
+ if (0)
+ real_libxl_get_required_shadow_memory(maxmem_kb, smp_cpus);
+ return 1234;
+}
+
VIR_MOCK_IMPL_RET_ARGS(__xstat, int,
int, ver,
const char *, path,
diff --git a/tests/libxlxml2domconfigdata/basic-hvm.json b/tests/libxlxml2domconfigdata/basic-hvm.json
index 87f8cb7d8a..d30875420d 100644
--- a/tests/libxlxml2domconfigdata/basic-hvm.json
+++ b/tests/libxlxml2domconfigdata/basic-hvm.json
@@ -15,7 +15,7 @@
"max_memkb": 1048576,
"target_memkb": 1048576,
"video_memkb": 8192,
- "shadow_memkb": 12288,
+ "shadow_memkb": 1234,
"device_model_version": "qemu_xen",
"device_model": "/bin/true",
"sched_params": {
diff --git a/tests/libxlxml2domconfigdata/basic-pv.json b/tests/libxlxml2domconfigdata/basic-pv.json
index b71c3b0f49..32d188fabd 100644
--- a/tests/libxlxml2domconfigdata/basic-pv.json
+++ b/tests/libxlxml2domconfigdata/basic-pv.json
@@ -14,7 +14,7 @@
],
"max_memkb": 524288,
"target_memkb": 524288,
- "shadow_memkb": 8192,
+ "shadow_memkb": 1234,
"sched_params": {
},
diff --git a/tests/libxlxml2domconfigdata/basic-pvh.json b/tests/libxlxml2domconfigdata/basic-pvh.json
index 48365c9026..f51957aa85 100644
--- a/tests/libxlxml2domconfigdata/basic-pvh.json
+++ b/tests/libxlxml2domconfigdata/basic-pvh.json
@@ -14,7 +14,7 @@
],
"max_memkb": 524288,
"target_memkb": 524288,
- "shadow_memkb": 8192,
+ "shadow_memkb": 1234,
"sched_params": {
},
diff --git a/tests/libxlxml2domconfigdata/cpu-shares-hvm.json b/tests/libxlxml2domconfigdata/cpu-shares-hvm.json
index 2aa97e88c5..15105c83ad 100644
--- a/tests/libxlxml2domconfigdata/cpu-shares-hvm.json
+++ b/tests/libxlxml2domconfigdata/cpu-shares-hvm.json
@@ -15,7 +15,7 @@
"max_memkb": 1048576,
"target_memkb": 1048576,
"video_memkb": 8192,
- "shadow_memkb": 12288,
+ "shadow_memkb": 1234,
"device_model_version": "qemu_xen",
"device_model": "/bin/true",
"sched_params": {
diff --git a/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json b/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json
index a2d46797aa..26f5abefee 100644
--- a/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json
+++ b/tests/libxlxml2domconfigdata/fullvirt-acpi-slic.json
@@ -11,7 +11,7 @@
],
"max_memkb": 592896,
"target_memkb": 403456,
- "shadow_memkb": 5656,
+ "shadow_memkb": 1234,
"sched_params": {
},
"apic": "True",
diff --git a/tests/libxlxml2domconfigdata/fullvirt-cpuid-legacy-nest.json b/tests/libxlxml2domconfigdata/fullvirt-cpuid-legacy-nest.json
index 6290655c20..740b82d2e6 100644
--- a/tests/libxlxml2domconfigdata/fullvirt-cpuid-legacy-nest.json
+++ b/tests/libxlxml2domconfigdata/fullvirt-cpuid-legacy-nest.json
@@ -11,7 +11,7 @@
],
"max_memkb": 592896,
"target_memkb": 403456,
- "shadow_memkb": 5656,
+ "shadow_memkb": 1234,
"cpuid": [
{
"leaf": 1,
diff --git a/tests/libxlxml2domconfigdata/fullvirt-cpuid.json b/tests/libxlxml2domconfigdata/fullvirt-cpuid.json
index 811a4f0ac7..8bf41894a5 100644
--- a/tests/libxlxml2domconfigdata/fullvirt-cpuid.json
+++ b/tests/libxlxml2domconfigdata/fullvirt-cpuid.json
@@ -11,7 +11,7 @@
],
"max_memkb": 592896,
"target_memkb": 403456,
- "shadow_memkb": 5656,
+ "shadow_memkb": 1234,
"cpuid": [
{
"leaf": 1,
diff --git a/tests/libxlxml2domconfigdata/max-eventchannels-hvm.json b/tests/libxlxml2domconfigdata/max-eventchannels-hvm.json
index 4a5b0ca65f..6f0daa065f 100644
--- a/tests/libxlxml2domconfigdata/max-eventchannels-hvm.json
+++ b/tests/libxlxml2domconfigdata/max-eventchannels-hvm.json
@@ -15,7 +15,7 @@
"max_memkb": 1048576,
"target_memkb": 1048576,
"video_memkb": 8192,
- "shadow_memkb": 12288,
+ "shadow_memkb": 1234,
"event_channels": 2047,
"device_model_version": "qemu_xen",
"device_model": "/bin/true",
diff --git a/tests/libxlxml2domconfigdata/max-gntframes-hvm.json b/tests/libxlxml2domconfigdata/max-gntframes-hvm.json
index 2883d057ff..35de588abc 100644
--- a/tests/libxlxml2domconfigdata/max-gntframes-hvm.json
+++ b/tests/libxlxml2domconfigdata/max-gntframes-hvm.json
@@ -15,7 +15,7 @@
"max_memkb": 1048576,
"target_memkb": 1048576,
"video_memkb": 8192,
- "shadow_memkb": 12288,
+ "shadow_memkb": 1234,
"max_grant_frames": 64,
"device_model_version": "qemu_xen",
"device_model": "/bin/true",
diff --git a/tests/libxlxml2domconfigdata/moredevs-hvm.json b/tests/libxlxml2domconfigdata/moredevs-hvm.json
index 58cf32a8d4..bdc9afc29b 100644
--- a/tests/libxlxml2domconfigdata/moredevs-hvm.json
+++ b/tests/libxlxml2domconfigdata/moredevs-hvm.json
@@ -17,7 +17,7 @@
"max_memkb": 1048576,
"target_memkb": 1048576,
"video_memkb": 8192,
- "shadow_memkb": 12288,
+ "shadow_memkb": 1234,
"device_model_version": "qemu_xen",
"device_model": "/bin/true",
"sched_params": {
diff --git a/tests/libxlxml2domconfigdata/multiple-ip.json b/tests/libxlxml2domconfigdata/multiple-ip.json
index 2db98b82f6..e0b37aa795 100644
--- a/tests/libxlxml2domconfigdata/multiple-ip.json
+++ b/tests/libxlxml2domconfigdata/multiple-ip.json
@@ -14,7 +14,7 @@
],
"max_memkb": 524288,
"target_memkb": 524288,
- "shadow_memkb": 8192,
+ "shadow_memkb": 1234,
"sched_params": {
},
diff --git a/tests/libxlxml2domconfigdata/variable-clock-hvm.json b/tests/libxlxml2domconfigdata/variable-clock-hvm.json
index 9a25d51da2..3c131c603c 100644
--- a/tests/libxlxml2domconfigdata/variable-clock-hvm.json
+++ b/tests/libxlxml2domconfigdata/variable-clock-hvm.json
@@ -15,7 +15,7 @@
"max_memkb": 1048576,
"target_memkb": 1048576,
"video_memkb": 8192,
- "shadow_memkb": 12288,
+ "shadow_memkb": 1234,
"rtc_timeoffset": 3600,
"localtime": "True",
"device_model_version": "qemu_xen",
diff --git a/tests/libxlxml2domconfigdata/vnuma-hvm-legacy-nest.json b/tests/libxlxml2domconfigdata/vnuma-hvm-legacy-nest.json
index 6cda8d0252..6725df9112 100644
--- a/tests/libxlxml2domconfigdata/vnuma-hvm-legacy-nest.json
+++ b/tests/libxlxml2domconfigdata/vnuma-hvm-legacy-nest.json
@@ -103,7 +103,7 @@
"max_memkb": 1048576,
"target_memkb": 1048576,
"video_memkb": 8192,
- "shadow_memkb": 14336,
+ "shadow_memkb": 1234,
"device_model_version": "qemu_xen",
"device_model": "/bin/true",
"sched_params": {
diff --git a/tests/libxlxml2domconfigdata/vnuma-hvm.json b/tests/libxlxml2domconfigdata/vnuma-hvm.json
index f578ccd3d3..2556c82d5f 100644
--- a/tests/libxlxml2domconfigdata/vnuma-hvm.json
+++ b/tests/libxlxml2domconfigdata/vnuma-hvm.json
@@ -103,7 +103,7 @@
"max_memkb": 1048576,
"target_memkb": 1048576,
"video_memkb": 8192,
- "shadow_memkb": 14336,
+ "shadow_memkb": 1234,
"device_model_version": "qemu_xen",
"device_model": "/bin/true",
"sched_params": {
--
2.37.3
@@ -0,0 +1,90 @@
From: Neal Gompa <ngompa13@gmail.com>
Date: Mon, 17 Jul 2017 11:32:46 -0400
Subject: [PATCH] spec: Add support for building the zfs storage driver
Where it can be supported in Fedora, the driver is built and made
available as a subpackage.
Signed-off-by: Neal Gompa <ngompa13@gmail.com>
(cherry picked from commit 9af764e86aef7dfb0191a9561bf1d1abf941da05)
---
libvirt.spec.in | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/libvirt.spec.in b/libvirt.spec.in
index 8eb67fa2e..f9a705e7c 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -70,6 +70,13 @@
%define with_storage_gluster 0%{!?_without_storage_gluster:1}
%define with_numactl 0%{!?_without_numactl:1}
+# F25+ has zfs-fuse
+%if 0%{?fedora} >= 25
+ %define with_storage_zfs 0%{!?_without_storage_zfs:1}
+%else
+ %define with_storage_zfs 0
+%endif
+
# A few optional bits off by default, we enable later
%define with_fuse 0%{!?_without_fuse:0}
%define with_cgconfig 0%{!?_without_cgconfig:0}
@@ -113,6 +120,12 @@
%endif
%endif
+# zfs-fuse is not available on some architectures
+%ifarch s390 s390x aarch64
+ %define with_storage_zfs 0
+%endif
+
+
# RHEL doesn't ship OpenVZ, VBox, UML, PowerHypervisor,
# VMware, libxenserver (xenapi), libxenlight (Xen 4.1 and newer),
# or HyperV.
@@ -364,6 +377,12 @@ BuildRequires: glusterfs-devel >= 3.4.1
%if %{with_storage_sheepdog}
BuildRequires: sheepdog
%endif
+%if %{with_storage_zfs}
+# Support any conforming implementation of zfs. On stock Fedora
+# this is zfs-fuse, but could be zfsonlinux upstream RPMs
+BuildRequires: /sbin/zfs
+BuildRequires: /sbin/zpool
+%endif
%if %{with_numactl}
# For QEMU/LXC numa info
BuildRequires: numactl-devel
@@ -597,6 +616,11 @@ Requires: device-mapper
# For Sheepdog support
Requires: sheepdog
%endif
+%if %{with_storage_zfs}
+# Support any conforming implementation of zfs
+Requires: /sbin/zfs
+Requires: /sbin/zpool
+%endif
%if %{with_qemu}
# From QEMU RPMs
Requires: /usr/bin/qemu-img
@@ -1063,6 +1087,12 @@ rm -rf .git
%define arg_storage_gluster --without-storage-gluster
%endif
+%if %{with_storage_zfs}
+ %define arg_storage_zfs --with-storage-zfs
+%else
+ %define arg_storage_zfs --without-storage-zfs
+%endif
+
%if %{with_numactl}
%define arg_numactl --with-numactl
%else
@@ -1170,6 +1200,7 @@ rm -f po/stamp-po
%{?arg_storage_rbd} \
%{?arg_storage_sheepdog} \
%{?arg_storage_gluster} \
+ %{?arg_storage_zfs} \
%{?arg_numactl} \
%{?arg_numad} \
--with-capng \
@@ -1,40 +0,0 @@
From c0d9adf220dc0d223330a7bac37b174132d330ba Mon Sep 17 00:00:00 2001
From: Cole Robinson <crobinso@redhat.com>
Date: Mon, 1 Aug 2022 15:24:01 -0400
Subject: [PATCH] virfile: Fix build with glibc 2.36
Content-type: text/plain
With glibc 2.36, sys/mount.h and linux/mount.h conflict:
https://sourceware.org/glibc/wiki/Release/2.36#Usage_of_.3Clinux.2Fmount.h.3E_and_.3Csys.2Fmount.h.3E
virfile.c imports sys/mount.h and linux/fs.h, which pulls in
linux/mount.h.
Manually define the constants we need from linux/fs.h, like was
done in llvm:
https://reviews.llvm.org/rGb379129c4beb3f26223288627a1291739f33af02
Reviewed-by: Erik Skultety <eskultet@redhat.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
---
src/util/virfile.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/util/virfile.c b/src/util/virfile.c
index 99da058db3..ce541b8946 100644
--- a/src/util/virfile.c
+++ b/src/util/virfile.c
@@ -71,7 +71,11 @@
# endif
# include <sys/ioctl.h>
# include <linux/cdrom.h>
-# include <linux/fs.h>
+/* These come from linux/fs.h, but that header conflicts with
+ * sys/mount.h on glibc 2.36+ */
+# define FS_IOC_GETFLAGS _IOR('f', 1, long)
+# define FS_IOC_SETFLAGS _IOW('f', 2, long)
+# define FS_NOCOW_FL 0x00800000
#endif
#if WITH_LIBATTR
+150
View File
@@ -0,0 +1,150 @@
From: Juan Hernandez <jhernand@redhat.com>
Date: Thu, 6 Jul 2017 17:03:31 +0200
Subject: [PATCH] Avoid hidden cgroup mount points
Currently the scan of the /proc/mounts file used to find cgroup mount
points doesn't take into account that mount points may hidden by other
mount points. For, example in certain Kubernetes environments the
/proc/mounts contains the following lines:
cgroup /sys/fs/cgroup/net_prio,net_cls cgroup ...
tmpfs /sys/fs/cgroup tmpfs ...
cgroup /sys/fs/cgroup/net_cls,net_prio cgroup ...
In this particular environment the first mount point is hidden by the
second one. The correct mount point is the third one, but libvirt will
never process it because it only checks the first mount point for each
controller (net_cls in this case). So libvirt will try to use the first
mount point, which doesn't actually exist, and the complete detection
process will fail.
To avoid that issue this patch changes the virCgroupDetectMountsFromFile
function so that when there are duplicates it takes the information from
the last line in /proc/mounts. This requires removing the previous
explicit condition to skip duplicates, and adding code to free the
memory used by the processing of duplicated lines.
Related-To: https://bugzilla.redhat.com/1468214
Related-To: https://github.com/kubevirt/libvirt/issues/4
Signed-off-by: Juan Hernandez <jhernand@redhat.com>
(cherry picked from commit dacd160d7479e0ec2d8a63f102145fd30636a1c8)
---
src/util/vircgroup.c | 23 ++++++++++++++---------
tests/vircgroupdata/kubevirt.mounts | 25 +++++++++++++++++++++++++
tests/vircgroupdata/kubevirt.parsed | 10 ++++++++++
tests/vircgrouptest.c | 1 +
4 files changed, 50 insertions(+), 9 deletions(-)
create mode 100644 tests/vircgroupdata/kubevirt.mounts
create mode 100644 tests/vircgroupdata/kubevirt.parsed
diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
index f2477d5e9..322f7fb54 100644
--- a/src/util/vircgroup.c
+++ b/src/util/vircgroup.c
@@ -396,6 +396,7 @@ virCgroupDetectMountsFromFile(virCgroupPtr group,
const char *typestr = virCgroupControllerTypeToString(i);
int typelen = strlen(typestr);
char *tmp = entry.mnt_opts;
+ struct virCgroupController *controller = &group->controllers[i];
while (tmp) {
char *next = strchr(tmp, ',');
int len;
@@ -405,18 +406,22 @@ virCgroupDetectMountsFromFile(virCgroupPtr group,
} else {
len = strlen(tmp);
}
- /* NB, the same controller can appear >1 time in mount list
- * due to bind mounts from one location to another. Pick the
- * first entry only
- */
- if (typelen == len && STREQLEN(typestr, tmp, len) &&
- !group->controllers[i].mountPoint) {
+
+ if (typelen == len && STREQLEN(typestr, tmp, len)) {
char *linksrc;
struct stat sb;
char *tmp2;
- if (VIR_STRDUP(group->controllers[i].mountPoint,
- entry.mnt_dir) < 0)
+ /* Note that the lines in /proc/mounts have the same
+ * order than the mount operations, and that there may
+ * be duplicates due to bind mounts. This means
+ * that the same mount point may be processed more than
+ * once. We need to save the results of the last one,
+ * and we need to be careful to release the memory used
+ * by previous processing. */
+ VIR_FREE(controller->mountPoint);
+ VIR_FREE(controller->linkPoint);
+ if (VIR_STRDUP(controller->mountPoint, entry.mnt_dir) < 0)
goto error;
tmp2 = strrchr(entry.mnt_dir, '/');
@@ -452,7 +457,7 @@ virCgroupDetectMountsFromFile(virCgroupPtr group,
VIR_WARN("Expecting a symlink at %s for controller %s",
linksrc, typestr);
} else {
- group->controllers[i].linkPoint = linksrc;
+ controller->linkPoint = linksrc;
}
}
}
diff --git a/tests/vircgroupdata/kubevirt.mounts b/tests/vircgroupdata/kubevirt.mounts
new file mode 100644
index 000000000..ca036196b
--- /dev/null
+++ b/tests/vircgroupdata/kubevirt.mounts
@@ -0,0 +1,25 @@
+rootfs / rootfs rw 0 0
+proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
+udev /dev devtmpfs rw,nosuid,relatime,size=10240k,nr_inodes=1006404,mode=755 0 0
+devpts /dev/pts devpts rw,relatime,gid=5,mode=620,ptmxmode=000 0 0
+sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
+/dev/sda1 / ext4 rw,noatime,data=ordered 0 0
+tmpfs /run tmpfs rw,nodev,relatime,size=812296k,mode=755 0 0
+mqueue /dev/mqueue mqueue rw,nosuid,nodev,noexec,relatime 0 0
+shm /dev/shm tmpfs rw,nosuid,nodev,noexec,relatime 0 0
+debugfs /sys/kernel/debug debugfs rw,nosuid,nodev,noexec,relatime 0 0
+cgroup_root /sys/fs/cgroup tmpfs rw,nosuid,nodev,noexec,relatime,size=10240k,mode=755 0 0
+openrc /sys/fs/cgroup/openrc cgroup rw,nosuid,nodev,noexec,relatime,release_agent=/lib64/rc/sh/cgroup-release-agent.sh,name=openrc 0 0
+cpuset /some/random/location/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
+cpuset /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
+cpu /sys/fs/cgroup/cpu cgroup rw,nosuid,nodev,noexec,relatime,cpu 0 0
+cpuacct /some/random/location/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuacct 0 0
+cpuacct /sys/fs/cgroup/cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpuacct 0 0
+memory /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
+devices /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
+freezer /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
+blkio /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
+perf_event /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0
+hugetlb /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0
+binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,nosuid,nodev,noexec,relatime 0 0
+freezer /some/random/location/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
diff --git a/tests/vircgroupdata/kubevirt.parsed b/tests/vircgroupdata/kubevirt.parsed
new file mode 100644
index 000000000..694870723
--- /dev/null
+++ b/tests/vircgroupdata/kubevirt.parsed
@@ -0,0 +1,10 @@
+cpu /sys/fs/cgroup/cpu
+cpuacct /sys/fs/cgroup/cpuacct
+cpuset /sys/fs/cgroup/cpuset
+memory /sys/fs/cgroup/memory
+devices /sys/fs/cgroup/devices
+freezer /some/random/location/freezer
+blkio /sys/fs/cgroup/blkio
+net_cls <null>
+perf_event /sys/fs/cgroup/perf_event
+name=systemd <null>
diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c
index f55ef74a1..cf0315f16 100644
--- a/tests/vircgrouptest.c
+++ b/tests/vircgrouptest.c
@@ -885,6 +885,7 @@ mymain(void)
DETECT_MOUNTS("cgroups3");
DETECT_MOUNTS("all-in-one");
DETECT_MOUNTS("no-cgroups");
+ DETECT_MOUNTS("kubevirt");
if (virTestRun("New cgroup for self", testCgroupNewForSelf, NULL) < 0)
ret = -1;
@@ -0,0 +1,53 @@
From: Jim Fehlig <jfehlig@suse.com>
Date: Tue, 18 Jul 2017 10:20:35 -0600
Subject: [PATCH] docs: schema: make disk driver name attribute optional
/domain/devices/disk/driver/@name is not a required or mandatory
attribute according to formatdomain, and indeed it was agreed on
IRC that the attribute is "optional for input, recommended (but
not required) for output". Currently the schema requires the
attribute, causing virt-xml-validate to fail on disk config where
the driver name is not explicitly specified. E.g.
# cat test.xml | grep -A 5 cdrom
<disk type='file' device='cdrom'>
<driver type='raw'/>
<target dev='hdb' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='0' target='0' unit='1'/>
</disk>
# virt-xml-validate test.xml
Relax-NG validity error : Extra element devices in interleave
test.xml:21: element devices: Relax-NG validity error : Element domain failed to validate content
test.xml fails to validate
Relaxing the name attribute to be optional fixes the validation
# virt-xml-validate test.xml
test.xml validates
(cherry picked from commit b494e09d058f09b48d0fd8855edd557101294671)
---
docs/schemas/domaincommon.rng | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 9a7d03ed9..38dda780e 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -1670,9 +1670,11 @@
</element>
</define>
<define name="driverFormat">
- <attribute name="name">
- <ref name="genericName"/>
- </attribute>
+ <optional>
+ <attribute name="name">
+ <ref name="genericName"/>
+ </attribute>
+ </optional>
<optional>
<attribute name='type'>
<choice>
+21
View File
@@ -0,0 +1,21 @@
# Makefile for source rpm: libvirt
# $Id$
NAME := libvirt
SPECFILE = $(firstword $(wildcard *.spec))
define find-makefile-common
for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done
endef
MAKEFILE_COMMON := $(shell $(find-makefile-common))
ifeq ($(MAKEFILE_COMMON),)
# attempt a checkout
define checkout-makefile-common
test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2
endef
MAKEFILE_COMMON := $(shell $(checkout-makefile-common))
endif
include $(MAKEFILE_COMMON)
+1988 -1479
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1 +1 @@
SHA512 (libvirt-8.6.0.tar.xz) = 6198ac33ea718045bfd12a2740d5a7fa70c754b1ecda7c0cad5791fbdf7311091587056254fde88ebe3c2f927a8fb56909fe4c3a115595854b18d3a704db73de
SHA512 (libvirt-2.2.1.tar.xz) = b89a2665bea81c440afc3f9f69c26e314344f1f2fbf53f82b25bdddcc89532ddf3393902e9cf552edb827ce5d8b46b9214b5a25303b19cf0f3f085131d870518