Compare commits

..

32 Commits

Author SHA1 Message Date
Richard W.M. Jones 67283bdf89 Backport fix for IPv6 connections to ESXi 2026-01-26 10:13:31 +00:00
Fedora Release Engineering e092293a63 Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild 2026-01-16 19:44:38 +00:00
Daniel P. Berrangé 41a6b3c03f Update to 12.0.0
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2026-01-15 09:22:17 +00:00
Daniel P. Berrangé 31256f3d0d Bump release for previous commit
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2026-01-12 19:32:49 +00:00
Daniel P. Berrangé abac39a1b8 Disable -Werror on ELN too
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2026-01-12 19:30:03 +00:00
Richard W.M. Jones 39e9be886f Rebuild for xen 4.21.0 2026-01-08 09:14:30 +00:00
Jiri Denemark 3db4281bc0 spec: Fix RPM build when %{fedora} is undefined
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
2025-12-23 16:26:17 -05:00
Cole Robinson 249ba7e495 libvirt-11.10.0-1
Update to version 11.10.0
2025-12-01 11:15:36 -05:00
Richard W.M. Jones 33a8555d08 Add upstream patches to fix parallel libguestfs 2025-11-17 18:30:12 +00:00
Tom spot Callaway dfb6f9eee6 rebuild for new fuse3 2025-11-04 16:26:27 -05:00
Daniel P. Berrangé f5c4597c0a Update to 11.9.0 release
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2025-11-03 14:42:01 +00:00
Peter Robinson 766bb232e8 build against fuse3
Support was added in 8.2 and fuse2 is EOL upstream and hence
unmaintained.
2025-10-29 19:15:04 +00:00
Cole Robinson 266d5e2fcb Fix build with latest wireshark
Signed-off-by: Cole Robinson <crobinso@redhat.com>
2025-10-14 19:00:29 -04:00
Cole Robinson c6cfdf3963 Update to version 11.8.0
Signed-off-by: Cole Robinson <crobinso@redhat.com>
2025-10-01 12:06:18 -04:00
Adam Williamson e3da3b01fc Rebuild on a side tag for libiscsi 2025-09-04 17:16:21 -07:00
Adam Williamson b340367499 Disable parallelization on i686
This is to get a build through to make the package installable
against the new libiscsi soname, which is high priority. It'd be
great if someone can look into the -j 64 build failures and fix
the problem going forward, though.
2025-09-04 14:51:18 -07:00
Adam Williamson ca7cc971b8 Rebuild for libiscsi.so.11 2025-09-04 13:27:20 -07:00
Cole Robinson 774125b7ed libvirt-11.7.0-1
Update to version 11.7.0
2025-09-02 10:52:38 -04:00
Cole Robinson afd39d2091 libvirt-11.6.0-1
Update to version 11.6.0
2025-08-05 11:37:25 -04:00
Fedora Release Engineering cc16b7cd3a Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-24 20:32:59 +00:00
Richard W.M. Jones be942ea860 Rebuild for updated Xen 2025-07-16 18:30:24 +01:00
Cole Robinson 938b89f090 libvirt-11.5.0-1
Update to version 11.5.0
2025-07-09 10:04:57 -04:00
Cole Robinson f7283923a3 Fix dumpxml failures after migration (bz 2369243)
Signed-off-by: Cole Robinson <crobinso@redhat.com>
2025-06-20 10:44:15 -04:00
Cole Robinson 1ad100593a libvirt-11.4.0-1
Update to version 11.4.0
2025-06-02 10:11:59 -04:00
Daniel P. Berrangé 21608be3b1 Sync zfs changes with upstream
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2025-05-14 11:23:03 +01:00
Adam Williamson 6347aef63f Properly obsolete libvirt-daemon-driver-storage-zfs 2025-05-08 23:52:57 -07:00
Cole Robinson 1c5d25ffeb zfs-fuse is gone from rawhide, drop libvirt-daemon-storage-zfs
Signed-off-by: Cole Robinson <crobinso@redhat.com>
2025-05-08 19:20:40 -04:00
Cole Robinson 8386ba3e9d Update to version 11.3.0
Signed-off-by: Cole Robinson <crobinso@redhat.com>
2025-05-07 13:14:23 -04:00
Daniel P. Berrangé 03d3983515 Fix tests with rebuild with GCC 15
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2025-04-29 15:50:37 +01:00
Daniel P. Berrangé 1b0f3aaf64 Fix Ampere 1 CPU and binary paths
- Fix install of Ampere 1 ARM CPU model (rhbz #2361196)
- Fix location of mount, umount (rhbz #2359196)
- Fix location of numad (rhbz #2359736)

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2025-04-29 14:50:14 +01:00
Cole Robinson 647354eaf9 libvirt-11.2.0-1
Update to version 11.2.0
2025-04-01 10:45:39 -04:00
Cole Robinson 1392d7120d libvirt-11.1.0-1
Update to version 11.1.0
2025-03-03 09:43:33 -05:00
17 changed files with 194 additions and 1547 deletions
@@ -1,31 +0,0 @@
From 5629ebcb4234fde10fd9468d5fc5dd4947ed8677 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
Date: Tue, 29 Apr 2025 15:49:10 +0100
Subject: [PATCH] Fix mocking of virQEMUCapsProbeHVF function
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
src/qemu/qemu_capabilities.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index ea7c14daa9..488a1a058e 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -943,7 +943,7 @@ bool
virQEMUCapsGetKVMSupportsSecureGuest(virQEMUCaps *qemuCaps) G_NO_INLINE;
bool
-virQEMUCapsProbeHVF(virQEMUCaps *qemuCaps) G_NO_INLINE;
+virQEMUCapsProbeHVF(virQEMUCaps *qemuCaps) G_NO_INLINE __attribute__((noipa));
virArch virQEMUCapsArchFromString(const char *arch);
const char *virQEMUCapsArchToString(virArch arch);
--
2.49.0
@@ -0,0 +1,41 @@
From 845210011a9ffd9d17e30c51cbc81ba67c5d3166 Mon Sep 17 00:00:00 2001
From: Michal Privoznik <mprivozn@redhat.com>
Date: Tue, 20 Jan 2026 10:08:29 +0100
Subject: [PATCH] esx: Allow connecting to IPv6 server
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
When connecting to a VMWare server, the hostname from URI is
resolved using esxUtil_ResolveHostname() which in turn calls
getaddrinfo(). But in the hints argument, we restrict the return
address to be IPv4 (AF_INET) which obviously fails if the address
to resolve is an IPv6 address. Set the hint to AF_UNSPEC which
allows both IPv4 and IPv6. While at it, also allow IPv4 addresses
mapped in IPv6 by setting AI_V4MAPPED flag.
Resolves: https://issues.redhat.com/browse/RHEL-138300
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
src/esx/esx_util.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/esx/esx_util.c b/src/esx/esx_util.c
index 88b3dc893f..a6275babd5 100644
--- a/src/esx/esx_util.c
+++ b/src/esx/esx_util.c
@@ -275,8 +275,8 @@ esxUtil_ResolveHostname(const char *hostname, char **ipAddress)
int errcode;
g_autofree char *address = NULL;
- hints.ai_flags = AI_ADDRCONFIG;
- hints.ai_family = AF_INET;
+ hints.ai_flags = AI_ADDRCONFIG | AI_V4MAPPED;
+ hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = 0;
--
2.52.0
@@ -1,85 +0,0 @@
From 63a3d70697dc44ef2f8b40f7c8e9aa869227a7da Mon Sep 17 00:00:00 2001
From: Jiang XueQian <jiangxueqian@gmail.com>
Date: Sat, 18 Jan 2025 16:32:10 +0800
Subject: [PATCH] nss: Skip empty files and avoid use of uninitialized value
Content-type: text/plain
JSON parser isn't called when reading empty files so `jerr` will be used
uninitialized in the original code. Empty files appear when a network
has no dhcp clients.
This patch checks for such files and skip them.
Fixes: a8d828c88bbdaf83ae78dc06cdd84d5667fcc424
Signed-off-by: Jiang XueQian <jiangxueqian@gmail.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
---
tools/nss/libvirt_nss_leases.c | 9 +++++++--
tools/nss/libvirt_nss_macs.c | 9 +++++++--
2 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/tools/nss/libvirt_nss_leases.c b/tools/nss/libvirt_nss_leases.c
index aea81bb56e..25ea6b0ce2 100644
--- a/tools/nss/libvirt_nss_leases.c
+++ b/tools/nss/libvirt_nss_leases.c
@@ -263,7 +263,7 @@ findLeases(const char *file,
enum json_tokener_error jerr;
int jsonflags = JSON_TOKENER_STRICT | JSON_TOKENER_VALIDATE_UTF8;
char line[1024];
- ssize_t nreadTotal = 0;
+ size_t nreadTotal = 0;
int rv;
if ((fd = open(file, O_RDONLY)) < 0) {
@@ -290,12 +290,17 @@ findLeases(const char *file,
jerr = json_tokener_get_error(tok);
} while (jerr == json_tokener_continue);
+ if (nreadTotal == 0) {
+ ret = 0;
+ goto cleanup;
+ }
+
if (jerr == json_tokener_continue) {
ERROR("Cannot parse %s: incomplete json found", file);
goto cleanup;
}
- if (nreadTotal > 0 && jerr != json_tokener_success) {
+ if (jerr != json_tokener_success) {
ERROR("Cannot parse %s: %s", file, json_tokener_error_desc(jerr));
goto cleanup;
}
diff --git a/tools/nss/libvirt_nss_macs.c b/tools/nss/libvirt_nss_macs.c
index 23229a18f3..bac8c0e1bb 100644
--- a/tools/nss/libvirt_nss_macs.c
+++ b/tools/nss/libvirt_nss_macs.c
@@ -124,7 +124,7 @@ findMACs(const char *file,
json_tokener *tok = NULL;
enum json_tokener_error jerr;
int jsonflags = JSON_TOKENER_STRICT | JSON_TOKENER_VALIDATE_UTF8;
- ssize_t nreadTotal = 0;
+ size_t nreadTotal = 0;
int rv;
size_t i;
@@ -152,12 +152,17 @@ findMACs(const char *file,
jerr = json_tokener_get_error(tok);
} while (jerr == json_tokener_continue);
+ if (nreadTotal == 0) {
+ ret = 0;
+ goto cleanup;
+ }
+
if (jerr == json_tokener_continue) {
ERROR("Cannot parse %s: incomplete json found", file);
goto cleanup;
}
- if (nreadTotal > 0 && jerr != json_tokener_success) {
+ if (jerr != json_tokener_success) {
ERROR("Cannot parse %s: %s", file, json_tokener_error_desc(jerr));
goto cleanup;
}
@@ -1,68 +0,0 @@
From cd0de70e05475d5f4aa46e578fbb98033d38c06b Mon Sep 17 00:00:00 2001
From: Michal Privoznik <mprivozn@redhat.com>
Date: Mon, 16 Jun 2025 10:28:37 +0200
Subject: [PATCH] qemu: Be more forgiving when acquiring QUERY job when
formatting domain XML
Content-type: text/plain
In my previous commit of v11.0.0-rc1~115 I've made QEMU driver
implementation for virDomainGetXMLDesc() (qemuDomainGetXMLDesc())
acquire QERY job. See its commit message for more info. But this
unfortunately broke apps witch fetch domain XML for incoming
migration (like virt-manager). The reason is that for incoming
migration the VIR_ASYNC_JOB_MIGRATION_IN async job is set, but
the mask of allowed synchronous jobs is empty (because QEMU can't
talk on monitor really). This makes virDomainObjBeginJob() fail
which in turn makes qemuDomainGetXMLDesc() fail too.
It makes sense for qemuDomainGetXMLDesc() to acquire the job
(e.g. so that it's coherent with another thread that might be in
the middle of a MODIFY job). But failure to dump XML may be
treated as broken daemon (e.g. virt-manager does so).
Therefore, still try to acquire the QUERY job (if job mask
permits it) but, do not treat failure as an error.
Fixes: 6cc93bf28842526be2fd596a607ebca796b7fb2e
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2369243
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
---
src/qemu/qemu_driver.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index d2eddbd9ae..6bdeede2e8 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -6158,6 +6158,7 @@ static char
{
virQEMUDriver *driver = dom->conn->privateData;
virDomainObj *vm;
+ bool hasJob = false;
char *ret = NULL;
virCheckFlags(VIR_DOMAIN_XML_COMMON_FLAGS | VIR_DOMAIN_XML_UPDATE_CPU,
@@ -6169,8 +6170,10 @@ static char
if (virDomainGetXMLDescEnsureACL(dom->conn, vm->def, flags) < 0)
goto cleanup;
- if (virDomainObjBeginJob(vm, VIR_JOB_QUERY) < 0)
- goto cleanup;
+ if (virDomainNestedJobAllowed(vm->job, VIR_JOB_QUERY) &&
+ virDomainObjBeginJob(vm, VIR_JOB_QUERY) >= 0) {
+ hasJob = true;
+ }
qemuDomainUpdateCurrentMemorySize(vm);
@@ -6186,7 +6189,8 @@ static char
ret = qemuDomainFormatXML(driver, vm, flags);
- virDomainObjEndJob(vm);
+ if (hasJob)
+ virDomainObjEndJob(vm);
cleanup:
virDomainObjEndAPI(&vm);
@@ -1,94 +0,0 @@
From 63e4cbd109374f44e8bd4f8d1af5e2a2c67611bc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
Date: Mon, 28 Apr 2025 11:42:13 +0100
Subject: [PATCH] storage: stop hardcoding paths for mkfs, mount, umount
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Daniel P. Berrangé <berrange@redhat.com>
This was always undesirable but now causes problems on Fedora 42
where at build time we detect a /sbin path but at runtime this
will only exist on upgraded machines, not fresh installs.
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
meson.build | 13 -------------
src/storage/storage_backend_fs.c | 17 +++--------------
2 files changed, 3 insertions(+), 27 deletions(-)
diff --git a/meson.build b/meson.build
index 37b1caa566..14c98b49a1 100644
--- a/meson.build
+++ b/meson.build
@@ -1827,23 +1827,10 @@ if conf.has('WITH_LIBVIRTD')
endif
endif
- if fs_enable
- mount_prog = find_program('mount', required: get_option('storage_fs'), dirs: libvirt_sbin_path)
- umount_prog = find_program('umount', required: get_option('storage_fs'), dirs: libvirt_sbin_path)
- mkfs_prog = find_program('mkfs', required: get_option('storage_fs'), dirs: libvirt_sbin_path)
-
- if not mount_prog.found() or not umount_prog.found() or not mkfs_prog.found()
- fs_enable = false
- endif
- endif
-
if fs_enable
use_storage = true
conf.set('WITH_STORAGE_FS', 1)
- conf.set_quoted('MOUNT', mount_prog.full_path())
- conf.set_quoted('UMOUNT', umount_prog.full_path())
- conf.set_quoted('MKFS', mkfs_prog.full_path())
endif
endif
diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
index fce395d60f..6ec359625a 100644
--- a/src/storage/storage_backend_fs.c
+++ b/src/storage/storage_backend_fs.c
@@ -304,7 +304,7 @@ virStorageBackendFileSystemMount(virStoragePoolObj *pool)
if (!(src = virStorageBackendFileSystemGetPoolSource(pool)))
return -1;
- cmd = virStorageBackendFileSystemMountCmd(MOUNT, def, src);
+ cmd = virStorageBackendFileSystemMountCmd("mount", def, src);
/* Mounting a shared FS might take a long time. Don't hold
* the pool locked meanwhile. */
@@ -362,7 +362,7 @@ virStorageBackendFileSystemStop(virStoragePoolObj *pool)
if ((rc = virStorageBackendFileSystemIsMounted(pool)) != 1)
return rc;
- cmd = virCommandNewArgList(UMOUNT, def->target.path, NULL);
+ cmd = virCommandNewArgList("umount", def->target.path, NULL);
return virCommandRun(cmd, NULL);
}
#endif /* WITH_STORAGE_FS */
@@ -402,18 +402,7 @@ virStorageBackendExecuteMKFS(const char *device,
g_autoptr(virCommand) cmd = NULL;
g_autofree char *mkfs = NULL;
-#if WITH_STORAGE_FS
- mkfs = virFindFileInPath(MKFS);
-#endif /* WITH_STORAGE_FS */
-
- if (!mkfs) {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("mkfs is not available on this platform: Failed to make filesystem of type '%1$s' on device '%2$s'"),
- format, device);
- return -1;
- }
-
- cmd = virCommandNewArgList(mkfs, "-t", format, NULL);
+ cmd = virCommandNewArgList("mkfs", "-t", format, NULL);
/* use the force, otherwise mkfs.xfs won't overwrite existing fs.
* Similarly mkfs.ext2, mkfs.ext3, and mkfs.ext4 require supplying -F
--
2.49.0
@@ -1,43 +0,0 @@
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
To: devel@lists.libvirt.org
Subject: [PATCH] util: avoid overflow in hextable buffer
Date: Mon, 20 Jan 2025 10:09:24 +0000
Message-ID: <20250120100924.3864818-1-berrange@redhat.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The assigned string is 17 chars long once the trailing nul is taken
into account. This triggers a warning with GCC 15
src/util/virsystemd.c: In function ‘virSystemdEscapeName’:
src/util/virsystemd.c:59:38: error: initializer-string for array of ‘char’ is too long [-Werror=unterminated-string-initialization]
59 | static const char hextable[16] = "0123456789abcdef";
| ^~~~~~~~~~~~~~~~~~
Switch to a dynamically sized array as used in all the other places
we have a hextable array.
See also: https://gcc.gnu.org/PR115185
Reported-by: Yaakov Selkowitz <yselkowi@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
src/util/virsystemd.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c
index 5b772e29dd..d46e5f74fc 100644
--- a/src/util/virsystemd.c
+++ b/src/util/virsystemd.c
@@ -56,7 +56,7 @@ struct _virSystemdActivationEntry {
static void virSystemdEscapeName(virBuffer *buf,
const char *name)
{
- static const char hextable[16] = "0123456789abcdef";
+ static const char hextable[] = "0123456789abcdef";
#define ESCAPE(c) \
do { \
--
2.47.1
@@ -1,58 +0,0 @@
From 7ab0f1c2a3fddf46d381f055e49111e3063b4829 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
Date: Mon, 28 Apr 2025 11:47:34 +0100
Subject: [PATCH] util: stop hardcoding numad path
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Daniel P. Berrangé <berrange@redhat.com>
Change the meson rules to always enable numad if on a Linux host, unless
the meson options say not to.
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
meson.build | 10 +++-------
src/util/virnuma.c | 2 +-
2 files changed, 4 insertions(+), 8 deletions(-)
diff --git a/meson.build b/meson.build
index 14c98b49a1..767205f44b 100644
--- a/meson.build
+++ b/meson.build
@@ -2028,14 +2028,10 @@ if not get_option('nss').disabled()
endif
endif
-if not get_option('numad').disabled() and numactl_dep.found()
- numad_prog = find_program('numad', required: get_option('numad'), dirs: libvirt_sbin_path)
- if numad_prog.found()
- conf.set('WITH_NUMAD', 1)
- conf.set_quoted('NUMAD', numad_prog.full_path())
- endif
+if not get_option('numad').disabled() and numactl_dep.found() and host_machine.system() == 'linux'
+ conf.set('WITH_NUMAD', 1)
elif get_option('numad').enabled()
- error('You must have numactl enabled for numad support.')
+ error('You must have a Linux host with numactl enabled for numad support.')
endif
# nwfilter should only be compiled for linux, and only if the
diff --git a/src/util/virnuma.c b/src/util/virnuma.c
index 9393c20875..67c51630c7 100644
--- a/src/util/virnuma.c
+++ b/src/util/virnuma.c
@@ -61,7 +61,7 @@ virNumaGetAutoPlacementAdvice(unsigned short vcpus,
g_autoptr(virCommand) cmd = NULL;
char *output = NULL;
- cmd = virCommandNewArgList(NUMAD, "-w", NULL);
+ cmd = virCommandNewArgList("numad", "-w", NULL);
virCommandAddArgFormat(cmd, "%d:%llu", vcpus,
VIR_DIV_UP(balloon, 1024));
--
2.49.0
@@ -1,36 +0,0 @@
From b825bb556bd3967bf5422c243b77bd4038e317e2 Mon Sep 17 00:00:00 2001
Message-ID: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
From: Michal Privoznik <mprivozn@redhat.com>
Date: Mon, 13 Oct 2025 10:34:51 +0200
Subject: [PATCH 1/8] wireshark: Drop needless declaration of
proto_register_libvirt() and proto_reg_handoff_libvirt()
Content-type: text/plain
Both proto_register_libvirt() and proto_reg_handoff_libvirt() are
declared in packet-libvirt.h which is included from plugin.c.
There's no need to provide another declaration in plugin.c.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
---
tools/wireshark/src/plugin.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/tools/wireshark/src/plugin.c b/tools/wireshark/src/plugin.c
index 9a83f2ca07..19b25e7b1a 100644
--- a/tools/wireshark/src/plugin.c
+++ b/tools/wireshark/src/plugin.c
@@ -72,9 +72,6 @@ void plugin_register(void)
#else /* WIRESHARK_VERSION >= 2009000 */
-void proto_register_libvirt(void);
-void proto_reg_handoff_libvirt(void);
-
WS_DLL_PUBLIC_DEF const gchar plugin_version[] = PLUGIN_VERSION;
WS_DLL_PUBLIC_DEF const int plugin_want_major = WIRESHARK_VERSION_MAJOR;
WS_DLL_PUBLIC_DEF const int plugin_want_minor = WIRESHARK_VERSION_MINOR;
--
2.51.0
@@ -1,47 +0,0 @@
From 41d3b457972bde85991fa7ed6f282370aca4b2af Mon Sep 17 00:00:00 2001
Message-ID: <41d3b457972bde85991fa7ed6f282370aca4b2af.1760476767.git.crobinso@redhat.com>
In-Reply-To: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
References: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
From: Michal Privoznik <mprivozn@redhat.com>
Date: Fri, 10 Oct 2025 15:20:05 +0200
Subject: [PATCH 2/8] wireshark: Switch header files to #pragma once
Content-type: text/plain
The genxdrstub.pl script generates some header files. But they
use the old pattern to guard against multiple inclusion:
#ifndef SOMETHING_H
#define SOMETHING_H
...
#endif
Change the script to generate just '#pragma once' used everywhere
else in our code.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
---
tools/wireshark/util/genxdrstub.pl | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/tools/wireshark/util/genxdrstub.pl b/tools/wireshark/util/genxdrstub.pl
index 8cfda25a27..01b663a88c 100755
--- a/tools/wireshark/util/genxdrstub.pl
+++ b/tools/wireshark/util/genxdrstub.pl
@@ -563,11 +563,8 @@ sub add_header_file {
local $self->{header_contents} = [];
$self->print("/* *DO NOT MODIFY* this file directly.\n");
$self->print(" * This file was generated by $0 from libvirt version $libvirt_version */\n");
- my $ucname = uc $name;
- $self->print("#ifndef _$ucname\_H_\n");
- $self->print("#define _$ucname\_H_\n");
+ $self->print("#pragma once\n");
$block->();
- $self->print("#endif /* _$ucname\_H_ */");
push @{ $self->{headers} }, [ $name, delete $self->{header_contents} ];
}
--
2.51.0
@@ -1,81 +0,0 @@
From 02a0e78bf54c903da8922c56bade9b3298ade351 Mon Sep 17 00:00:00 2001
Message-ID: <02a0e78bf54c903da8922c56bade9b3298ade351.1760476767.git.crobinso@redhat.com>
In-Reply-To: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
References: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
From: Michal Privoznik <mprivozn@redhat.com>
Date: Mon, 13 Oct 2025 09:04:17 +0200
Subject: [PATCH 3/8] wireshark: Move WIRESHARK_VERSION macro definition
Content-type: text/plain
Soon, other parts of the wireshark code will need to
differentiate wrt wireshark version. Therefore, move the
WIRESHARK_VERSION macro definition among with its deps into
packet-libvirt.h.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
---
tools/wireshark/src/packet-libvirt.h | 14 ++++++++++++++
tools/wireshark/src/plugin.c | 14 --------------
2 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/tools/wireshark/src/packet-libvirt.h b/tools/wireshark/src/packet-libvirt.h
index 14e6e13696..15cfcb0534 100644
--- a/tools/wireshark/src/packet-libvirt.h
+++ b/tools/wireshark/src/packet-libvirt.h
@@ -19,5 +19,19 @@
#pragma once
+#ifdef WITH_WS_VERSION
+# include <wireshark/ws_version.h>
+#else
+# include <wireshark/config.h>
+# define WIRESHARK_VERSION_MAJOR VERSION_MAJOR
+# define WIRESHARK_VERSION_MINOR VERSION_MINOR
+# define WIRESHARK_VERSION_MICRO VERSION_MICRO
+#endif
+
+#define WIRESHARK_VERSION \
+ ((WIRESHARK_VERSION_MAJOR * 1000 * 1000) + \
+ (WIRESHARK_VERSION_MINOR * 1000) + \
+ (WIRESHARK_VERSION_MICRO))
+
void proto_register_libvirt(void);
void proto_reg_handoff_libvirt(void);
diff --git a/tools/wireshark/src/plugin.c b/tools/wireshark/src/plugin.c
index 19b25e7b1a..64317b5280 100644
--- a/tools/wireshark/src/plugin.c
+++ b/tools/wireshark/src/plugin.c
@@ -12,15 +12,6 @@
#include <config.h>
-#ifdef WITH_WS_VERSION
-# include <wireshark/ws_version.h>
-#else
-# include <wireshark/config.h>
-# define WIRESHARK_VERSION_MAJOR VERSION_MAJOR
-# define WIRESHARK_VERSION_MINOR VERSION_MINOR
-# define WIRESHARK_VERSION_MICRO VERSION_MICRO
-#endif
-
#define HAVE_PLUGINS 1
#include <wireshark/epan/proto.h>
/* plugins are DLLs */
@@ -32,11 +23,6 @@
/* Let the plugin version be the version of libvirt */
#define PLUGIN_VERSION VERSION
-#define WIRESHARK_VERSION \
- ((WIRESHARK_VERSION_MAJOR * 1000 * 1000) + \
- (WIRESHARK_VERSION_MINOR * 1000) + \
- (WIRESHARK_VERSION_MICRO))
-
#if WIRESHARK_VERSION < 2005000
WS_DLL_PUBLIC_DEF const gchar version[] = VERSION;
--
2.51.0
@@ -1,133 +0,0 @@
From 7374c4ecbd591b02f7be4b2918addc6d5852aafb Mon Sep 17 00:00:00 2001
Message-ID: <7374c4ecbd591b02f7be4b2918addc6d5852aafb.1760476767.git.crobinso@redhat.com>
In-Reply-To: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
References: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
From: Michal Privoznik <mprivozn@redhat.com>
Date: Mon, 13 Oct 2025 09:21:30 +0200
Subject: [PATCH 4/8] wireshark: Fix int type of some virNetMessageHeader
members
Content-type: text/plain
Our virNetMessageHeader is a struct that's declared as follows:
struct virNetMessageHeader {
unsigned prog;
unsigned vers;
int proc;
virNetMessageType type;
unsigned serial;
virNetMessageStatus status;
};
Now, per RFC 4506 enums are also encoded as signed integers. This
means, that only 'prog', 'vers' and 'serial' are really unsigned
integers. The others ('proc', 'type' and 'status') are encoded as
signed integers. Fix their type when dissecting.
While at it, also follow latest trend in wireshark and switch
from guint32 to uint32_t.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
---
tools/wireshark/src/packet-libvirt.c | 34 +++++++++++++++++++---------
1 file changed, 23 insertions(+), 11 deletions(-)
diff --git a/tools/wireshark/src/packet-libvirt.c b/tools/wireshark/src/packet-libvirt.c
index da2aabd98a..af14c6bed7 100644
--- a/tools/wireshark/src/packet-libvirt.c
+++ b/tools/wireshark/src/packet-libvirt.c
@@ -92,7 +92,7 @@ typedef gboolean (*vir_xdr_dissector_t)(tvbuff_t *tvb, proto_tree *tree, XDR *xd
typedef struct vir_dissector_index vir_dissector_index_t;
struct vir_dissector_index {
- guint32 proc;
+ int32_t proc;
vir_xdr_dissector_t args;
vir_xdr_dissector_t ret;
vir_xdr_dissector_t msg;
@@ -275,8 +275,10 @@ dissect_xdr_array(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf, gint ett,
}
static vir_xdr_dissector_t
-find_payload_dissector(guint32 proc, guint32 type,
- const vir_dissector_index_t *pds, gsize length)
+find_payload_dissector(int32_t proc,
+ enum vir_net_message_type type,
+ const vir_dissector_index_t *pds,
+ gsize length)
{
const vir_dissector_index_t *pd;
guint32 first, last, direction;
@@ -309,6 +311,10 @@ find_payload_dissector(guint32 proc, guint32 type,
return pd->ret;
case VIR_NET_MESSAGE:
return pd->msg;
+ case VIR_NET_STREAM:
+ case VIR_NET_STREAM_HOLE:
+ /* Handled elsewhere */
+ return NULL;
}
return NULL;
}
@@ -397,8 +403,12 @@ dissect_xdr_stream_hole(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf)
#include "libvirt/protocol.h"
static void
-dissect_libvirt_payload(tvbuff_t *tvb, proto_tree *tree,
- guint32 prog, guint32 proc, guint32 type, guint32 status)
+dissect_libvirt_payload(tvbuff_t *tvb,
+ proto_tree *tree,
+ uint32_t prog,
+ int32_t proc,
+ int32_t type,
+ int32_t status)
{
gssize payload_length;
@@ -430,7 +440,8 @@ dissect_libvirt_payload(tvbuff_t *tvb, proto_tree *tree,
return;
unknown:
- dbg("Cannot determine payload: Prog=%u, Proc=%u, Type=%u, Status=%u", prog, proc, type, status);
+ dbg("Cannot determine payload: Prog=%u, Proc=%d, Type=%d, Status=%d",
+ prog, proc, type, status);
proto_tree_add_item(tree, hf_libvirt_unknown, tvb, VIR_HEADER_LEN, -1, ENC_NA);
}
@@ -439,7 +450,8 @@ dissect_libvirt_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
void *opaque G_GNUC_UNUSED)
{
goffset offset;
- guint32 prog, proc, type, serial, status;
+ uint32_t prog, serial;
+ int32_t proc, type, status;
const value_string *vs;
col_set_str(pinfo->cinfo, COL_PROTOCOL, "Libvirt");
@@ -448,17 +460,17 @@ dissect_libvirt_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
offset = 4; /* End of length field */
prog = tvb_get_ntohl(tvb, offset); offset += 4;
offset += 4; /* Ignore version header field */
- proc = tvb_get_ntohl(tvb, offset); offset += 4;
- type = tvb_get_ntohl(tvb, offset); offset += 4;
+ proc = tvb_get_ntohil(tvb, offset); offset += 4;
+ type = tvb_get_ntohil(tvb, offset); offset += 4;
serial = tvb_get_ntohl(tvb, offset); offset += 4;
- status = tvb_get_ntohl(tvb, offset); offset += 4;
+ status = tvb_get_ntohil(tvb, offset); offset += 4;
col_add_fstr(pinfo->cinfo, COL_INFO, "Prog=%s",
val_to_str(prog, program_strings, "%x"));
vs = get_program_data(prog, VIR_PROGRAM_PROCSTRINGS);
if (vs == NULL) {
- col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%u", proc);
+ col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%d", proc);
} else {
col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%s", val_to_str(proc, vs, "%d"));
}
--
2.51.0
@@ -1,46 +0,0 @@
From 1086888f95a322101f8cf53b63c96600ccbeb882 Mon Sep 17 00:00:00 2001
Message-ID: <1086888f95a322101f8cf53b63c96600ccbeb882.1760476767.git.crobinso@redhat.com>
In-Reply-To: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
References: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
From: Michal Privoznik <mprivozn@redhat.com>
Date: Fri, 10 Oct 2025 19:16:54 +0200
Subject: [PATCH 5/8] wireshark: Don't special case retval of
get_program_data() in dissect_libvirt_message()
Content-type: text/plain
The get_program_data() function returns a pointer (in this
specific case to an array of procedure strings) which, if
non-NULL is then passed val_to_str(). Well, if val_to_str() sees
NULL it is treated gracefully, i.e. like if the numeric value
'proc' wasn't found in the array.
Therefore, there's no need to special case call to
col_append_fstr(). Both result into the same behaviour.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
---
tools/wireshark/src/packet-libvirt.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/tools/wireshark/src/packet-libvirt.c b/tools/wireshark/src/packet-libvirt.c
index af14c6bed7..6c729801d4 100644
--- a/tools/wireshark/src/packet-libvirt.c
+++ b/tools/wireshark/src/packet-libvirt.c
@@ -469,11 +469,7 @@ dissect_libvirt_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
val_to_str(prog, program_strings, "%x"));
vs = get_program_data(prog, VIR_PROGRAM_PROCSTRINGS);
- if (vs == NULL) {
- col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%d", proc);
- } else {
- col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%s", val_to_str(proc, vs, "%d"));
- }
+ col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%s", val_to_str(proc, vs, "%d"));
col_append_fstr(pinfo->cinfo, COL_INFO, " Type=%s Serial=%u Status=%s",
val_to_str(type, type_strings, "%d"), serial,
--
2.51.0
@@ -1,68 +0,0 @@
From ba2c4bdd5cbccd5c0673149cf76802c98b70d2f7 Mon Sep 17 00:00:00 2001
Message-ID: <ba2c4bdd5cbccd5c0673149cf76802c98b70d2f7.1760476767.git.crobinso@redhat.com>
In-Reply-To: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
References: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
From: Michal Privoznik <mprivozn@redhat.com>
Date: Fri, 10 Oct 2025 18:23:18 +0200
Subject: [PATCH 6/8] wireshark: Introduce and use vir_val_to_str()
Content-type: text/plain
Wireshark offers val_to_str() function which converts numeric
value to string by looking up value ('val') in an array ('vs') of
<val, string> pairs. If no corresponding string is found, then
the value is formatted using given 'fmt' string.
Starting from wireshark-4.6.0 not only this function gained
another argument but also returns a strdup()-ed string. To keep
our code simple, let's introduce a wrapper so which can be then
adjusted as needed.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
---
tools/wireshark/src/packet-libvirt.c | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/tools/wireshark/src/packet-libvirt.c b/tools/wireshark/src/packet-libvirt.c
index 6c729801d4..f6ad2c4578 100644
--- a/tools/wireshark/src/packet-libvirt.c
+++ b/tools/wireshark/src/packet-libvirt.c
@@ -140,6 +140,15 @@ static const value_string status_strings[] = {
{ -1, NULL }
};
+static const char *
+G_GNUC_PRINTF(3, 0)
+vir_val_to_str(const uint32_t val,
+ const value_string *vs,
+ const char *fmt)
+{
+ return val_to_str(val, vs, fmt);
+}
+
static gboolean
dissect_xdr_string(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
guint32 maxlen)
@@ -466,14 +475,14 @@ dissect_libvirt_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
status = tvb_get_ntohil(tvb, offset); offset += 4;
col_add_fstr(pinfo->cinfo, COL_INFO, "Prog=%s",
- val_to_str(prog, program_strings, "%x"));
+ vir_val_to_str(prog, program_strings, "%x"));
vs = get_program_data(prog, VIR_PROGRAM_PROCSTRINGS);
- col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%s", val_to_str(proc, vs, "%d"));
+ col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%s", vir_val_to_str(proc, vs, "%d"));
col_append_fstr(pinfo->cinfo, COL_INFO, " Type=%s Serial=%u Status=%s",
- val_to_str(type, type_strings, "%d"), serial,
- val_to_str(status, status_strings, "%d"));
+ vir_val_to_str(type, type_strings, "%d"), serial,
+ vir_val_to_str(status, status_strings, "%d"));
if (tree) {
gint *hf_proc;
--
2.51.0
@@ -1,165 +0,0 @@
From 002b9f559d69b92e77ab2d234df6966fecdaf0ec Mon Sep 17 00:00:00 2001
Message-ID: <002b9f559d69b92e77ab2d234df6966fecdaf0ec.1760476767.git.crobinso@redhat.com>
In-Reply-To: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
References: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
From: Michal Privoznik <mprivozn@redhat.com>
Date: Fri, 10 Oct 2025 19:13:48 +0200
Subject: [PATCH 7/8] wireshark: Don't leak column strings
Content-type: text/plain
One of the problems of using val_to_str() is that it may return a
const string from given table ('vs'), OR return an allocated one.
Since the caller has no idea which case it is, it resides to safe
option and don't free returned string. But that might lead to a
memleak. This behaviour is fixed with wireshark-4.6.0 and support
for it will be introduced soon. But first, make vir_val_to_str()
behave like fixed val_to_str() from newer wireshark: just always
allocate the string.
Now, if val_to_str() needs to allocate new memory it obtains
allocator by calling wmem_packet_scope() which is what we may do
too.
Hand in hand with that, we need to free the memory using the
correct allocator, hence wmem_free(). But let's put it into a
wrapper vir_wmem_free() because just like val_to_str(), it'll
need additional argument when adapting to new wireshark.
Oh, and freeing the memory right after col_add_fstr() is safe as
it uses vsnprintf() under the hood to format passed args.
One last thing, the wmem.h file used to live under epan/wmem/ but
then in v3.5.0~240 [1] was moved to wsutil/wmem/.
1: https://gitlab.com/wireshark/wireshark/-/commit/7f9c1f5f92c131354fc8b2b88d473706786064c0
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
---
meson.build | 20 ++++++++++++++++
tools/wireshark/src/meson.build | 1 +
tools/wireshark/src/packet-libvirt.c | 35 ++++++++++++++++++++++------
3 files changed, 49 insertions(+), 7 deletions(-)
diff --git a/meson.build b/meson.build
index bcc18b20e5..a1e0e5ecd5 100644
--- a/meson.build
+++ b/meson.build
@@ -1365,6 +1365,26 @@ if wireshark_dep.found()
if cc.check_header('wireshark/ws_version.h')
conf.set('WITH_WS_VERSION', 1)
endif
+
+ # Find wmem.h
+ # But it's not as easy as you'd think. Ubuntu 20.04 has split parts of
+ # libwireshark.so into libwsutil.so but:
+ # a) wireshark.pc never mentions it,
+ # b) libwsutil-dev package doesn't install pkg-config file.
+ # Fortunately, it's fixed in 24.04.
+ if cc.check_header('wireshark/epan/wmem/wmem.h', dependencies: wireshark_dep)
+ conf.set('WITH_WS_EPAN_WMEM', 1)
+ elif cc.check_header('wireshark/wsutil/wmem/wmem.h', dependencies: wireshark_dep)
+ conf.set('WITH_WS_WSUTIL_WMEM', 1)
+ else
+ error('Unable to locate wmem.h file')
+ endif
+
+ # TODO: drop wsutil dep once support for Ubuntu 20.04 is dropped
+ wsutil_dep = dependency('', required: false)
+ if not cc.has_function('wmem_free', dependencies: wireshark_dep)
+ wsutil_dep = cc.find_library('wsutil', required: true)
+ endif
endif
# generic build dependencies checks
diff --git a/tools/wireshark/src/meson.build b/tools/wireshark/src/meson.build
index 9b452dc5ca..ba0df913e0 100644
--- a/tools/wireshark/src/meson.build
+++ b/tools/wireshark/src/meson.build
@@ -9,6 +9,7 @@ shared_library(
],
dependencies: [
wireshark_dep,
+ wsutil_dep,
xdr_dep,
tools_dep,
],
diff --git a/tools/wireshark/src/packet-libvirt.c b/tools/wireshark/src/packet-libvirt.c
index f6ad2c4578..3178ac6f27 100644
--- a/tools/wireshark/src/packet-libvirt.c
+++ b/tools/wireshark/src/packet-libvirt.c
@@ -21,6 +21,11 @@
#include <wireshark/epan/proto.h>
#include <wireshark/epan/packet.h>
#include <wireshark/epan/dissectors/packet-tcp.h>
+#ifdef WITH_WS_EPAN_WMEM
+# include <wireshark/epan/wmem/wmem.h>
+#elif WITH_WS_WSUTIL_WMEM
+# include <wireshark/wsutil/wmem/wmem.h>
+#endif
#include <rpc/types.h>
#include <rpc/xdr.h>
#include "packet-libvirt.h"
@@ -140,13 +145,19 @@ static const value_string status_strings[] = {
{ -1, NULL }
};
-static const char *
+static char *
G_GNUC_PRINTF(3, 0)
vir_val_to_str(const uint32_t val,
const value_string *vs,
const char *fmt)
{
- return val_to_str(val, vs, fmt);
+ return val_to_str_wmem(wmem_packet_scope(), val, vs, fmt);
+}
+
+static void
+vir_wmem_free(void *ptr)
+{
+ wmem_free(wmem_packet_scope(), ptr);
}
static gboolean
@@ -462,6 +473,10 @@ dissect_libvirt_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
uint32_t prog, serial;
int32_t proc, type, status;
const value_string *vs;
+ char *prog_str = NULL;
+ char *proc_str = NULL;
+ char *type_str = NULL;
+ char *status_str = NULL;
col_set_str(pinfo->cinfo, COL_PROTOCOL, "Libvirt");
col_clear(pinfo->cinfo, COL_INFO);
@@ -474,15 +489,21 @@ dissect_libvirt_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
serial = tvb_get_ntohl(tvb, offset); offset += 4;
status = tvb_get_ntohil(tvb, offset); offset += 4;
- col_add_fstr(pinfo->cinfo, COL_INFO, "Prog=%s",
- vir_val_to_str(prog, program_strings, "%x"));
+ prog_str = vir_val_to_str(prog, program_strings, "%x");
+ col_add_fstr(pinfo->cinfo, COL_INFO, "Prog=%s", prog_str);
+ vir_wmem_free(prog_str);
vs = get_program_data(prog, VIR_PROGRAM_PROCSTRINGS);
- col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%s", vir_val_to_str(proc, vs, "%d"));
+ proc_str = vir_val_to_str(proc, vs, "%d");
+ col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%s", proc_str);
+ vir_wmem_free(proc_str);
+ type_str = vir_val_to_str(type, type_strings, "%d");
+ status_str = vir_val_to_str(status, status_strings, "%d");
col_append_fstr(pinfo->cinfo, COL_INFO, " Type=%s Serial=%u Status=%s",
- vir_val_to_str(type, type_strings, "%d"), serial,
- vir_val_to_str(status, status_strings, "%d"));
+ type_str, serial, status_str);
+ vir_wmem_free(status_str);
+ vir_wmem_free(type_str);
if (tree) {
gint *hf_proc;
--
2.51.0
@@ -1,493 +0,0 @@
From b42a12174c787b99cd6fcb29b44e4b13bd64ee58 Mon Sep 17 00:00:00 2001
Message-ID: <b42a12174c787b99cd6fcb29b44e4b13bd64ee58.1760476767.git.crobinso@redhat.com>
In-Reply-To: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
References: <b825bb556bd3967bf5422c243b77bd4038e317e2.1760476767.git.crobinso@redhat.com>
From: Michal Privoznik <mprivozn@redhat.com>
Date: Fri, 10 Oct 2025 15:22:34 +0200
Subject: [PATCH 8/8] wireshark: Adapt to wireshark-4.6.0
Content-type: text/plain
The main difference is that wmem_packet_scope() is gone [1] but
the packet_info struct has 'pool` member which points to the
allocator used for given packet.
Unfortunately, while we were given pointer to packet_info at the
entry level to our dissector (dissect_libvirt() ->
tcp_dissect_pdus() -> dissect_libvirt_message()) it was never
propagated to generated/primitive dissectors.
But not all dissectors need to allocate memory, so mark the new
argument as unused. And while our generator could be rewritten so
that the argument is annotated as unused iff it's really unused,
I couldn't bother rewriting it. It's generated code after all.
Too much work for little gain.
Another significant change is that val_to_str() now requires new
argument: pointer to allocator to use because it always allocates
new memory [2][3].
1: https://gitlab.com/wireshark/wireshark/-/commit/5ca5c9ca372e06881b23ba9f4fdcb6b479886444
2: https://gitlab.com/wireshark/wireshark/-/commit/b63599762468e4cf1783419a5556377604d344bb
3: https://gitlab.com/wireshark/wireshark/-/commit/84799be215313e61b83a3eaf074f89d6ee349b8c
Resolves: https://gitlab.com/libvirt/libvirt/-/issues/823
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
---
tools/wireshark/src/packet-libvirt.c | 157 +++++++++++++++++++--------
tools/wireshark/util/genxdrstub.pl | 18 +--
2 files changed, 119 insertions(+), 56 deletions(-)
diff --git a/tools/wireshark/src/packet-libvirt.c b/tools/wireshark/src/packet-libvirt.c
index 3178ac6f27..c5c8fb4756 100644
--- a/tools/wireshark/src/packet-libvirt.c
+++ b/tools/wireshark/src/packet-libvirt.c
@@ -63,7 +63,7 @@ static gint ett_libvirt_stream_hole = -1;
#define XDR_PRIMITIVE_DISSECTOR(xtype, ctype, ftype) \
static gboolean \
- dissect_xdr_##xtype(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf) \
+ dissect_xdr_##xtype(tvbuff_t *tvb, packet_info *pinfo G_GNUC_UNUSED, proto_tree *tree, XDR *xdrs, int hf) \
{ \
goffset start; \
ctype val; \
@@ -93,7 +93,7 @@ XDR_PRIMITIVE_DISSECTOR(bool, bool_t, boolean)
VIR_WARNINGS_RESET
-typedef gboolean (*vir_xdr_dissector_t)(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf);
+typedef gboolean (*vir_xdr_dissector_t)(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, XDR *xdrs, int hf);
typedef struct vir_dissector_index vir_dissector_index_t;
struct vir_dissector_index {
@@ -146,22 +146,32 @@ static const value_string status_strings[] = {
};
static char *
-G_GNUC_PRINTF(3, 0)
-vir_val_to_str(const uint32_t val,
+G_GNUC_PRINTF(4, 0)
+vir_val_to_str(packet_info *pinfo,
+ const uint32_t val,
const value_string *vs,
const char *fmt)
{
- return val_to_str_wmem(wmem_packet_scope(), val, vs, fmt);
+#if WIRESHARK_VERSION < 4006000
+ return val_to_str_wmem(pinfo->pool, val, vs, fmt);
+#else
+ return val_to_str(pinfo->pool, val, vs, fmt);
+#endif
}
static void
-vir_wmem_free(void *ptr)
+vir_wmem_free(packet_info *pinfo,
+ void *ptr)
{
- wmem_free(wmem_packet_scope(), ptr);
+ wmem_free(pinfo->pool, ptr);
}
static gboolean
-dissect_xdr_string(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
+dissect_xdr_string(tvbuff_t *tvb,
+ packet_info *pinfo G_GNUC_UNUSED,
+ proto_tree *tree,
+ XDR *xdrs,
+ int hf,
guint32 maxlen)
{
goffset start;
@@ -179,7 +189,11 @@ dissect_xdr_string(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
}
static gboolean
-dissect_xdr_opaque(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
+dissect_xdr_opaque(tvbuff_t *tvb,
+ packet_info *pinfo,
+ proto_tree *tree,
+ XDR *xdrs,
+ int hf,
guint32 size)
{
goffset start;
@@ -190,7 +204,7 @@ dissect_xdr_opaque(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
start = xdr_getpos(xdrs);
if ((rc = xdr_opaque(xdrs, (caddr_t)val, size))) {
gint len = xdr_getpos(xdrs) - start;
- const char *s = tvb_bytes_to_str(wmem_packet_scope(), tvb, start, len);
+ const char *s = tvb_bytes_to_str(pinfo->pool, tvb, start, len);
proto_tree_add_bytes_format_value(tree, hf, tvb, start, len, NULL, "%s", s);
} else {
@@ -202,7 +216,11 @@ dissect_xdr_opaque(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
}
static gboolean
-dissect_xdr_bytes(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
+dissect_xdr_bytes(tvbuff_t *tvb,
+ packet_info *pinfo,
+ proto_tree *tree,
+ XDR *xdrs,
+ int hf,
guint32 maxlen)
{
goffset start;
@@ -212,7 +230,7 @@ dissect_xdr_bytes(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
start = xdr_getpos(xdrs);
if (xdr_bytes(xdrs, (char **)&val, &length, maxlen)) {
gint len = xdr_getpos(xdrs) - start;
- const char *s = tvb_bytes_to_str(wmem_packet_scope(), tvb, start, len);
+ const char *s = tvb_bytes_to_str(pinfo->pool, tvb, start, len);
proto_tree_add_bytes_format_value(tree, hf, tvb, start, len, NULL, "%s", s);
free(val);
@@ -224,7 +242,11 @@ dissect_xdr_bytes(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
}
static gboolean
-dissect_xdr_pointer(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
+dissect_xdr_pointer(tvbuff_t *tvb,
+ packet_info *pinfo,
+ proto_tree *tree,
+ XDR *xdrs,
+ int hf,
vir_xdr_dissector_t dissect)
{
goffset start;
@@ -236,7 +258,7 @@ dissect_xdr_pointer(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
return FALSE;
}
if (not_null) {
- return dissect(tvb, tree, xdrs, hf);
+ return dissect(tvb, pinfo, tree, xdrs, hf);
} else {
proto_item *ti;
ti = proto_tree_add_item(tree, hf, tvb, start, xdr_getpos(xdrs) - start, ENC_NA);
@@ -246,15 +268,22 @@ dissect_xdr_pointer(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf,
}
static gboolean
-dissect_xdr_iterable(tvbuff_t *tvb, proto_item *ti, XDR *xdrs, gint ett, int rhf,
- guint32 length, vir_xdr_dissector_t dissect, goffset start)
+dissect_xdr_iterable(tvbuff_t *tvb,
+ packet_info *pinfo,
+ proto_item *ti,
+ XDR *xdrs,
+ gint ett,
+ int rhf,
+ guint32 length,
+ vir_xdr_dissector_t dissect,
+ goffset start)
{
proto_tree *tree;
guint32 i;
tree = proto_item_add_subtree(ti, ett);
for (i = 0; i < length; i++) {
- if (!dissect(tvb, tree, xdrs, rhf))
+ if (!dissect(tvb, pinfo, tree, xdrs, rhf))
return FALSE;
}
proto_item_set_len(ti, xdr_getpos(xdrs) - start);
@@ -262,8 +291,16 @@ dissect_xdr_iterable(tvbuff_t *tvb, proto_item *ti, XDR *xdrs, gint ett, int rhf
}
static gboolean
-dissect_xdr_vector(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf, gint ett,
- int rhf, const gchar *rtype, guint32 size, vir_xdr_dissector_t dissect)
+dissect_xdr_vector(tvbuff_t *tvb,
+ packet_info *pinfo,
+ proto_tree *tree,
+ XDR *xdrs,
+ int hf,
+ gint ett,
+ int rhf,
+ const gchar *rtype,
+ guint32 size,
+ vir_xdr_dissector_t dissect)
{
goffset start;
proto_item *ti;
@@ -271,12 +308,20 @@ dissect_xdr_vector(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf, gint ett,
start = xdr_getpos(xdrs);
ti = proto_tree_add_item(tree, hf, tvb, start, -1, ENC_NA);
proto_item_append_text(ti, " :: %s[%u]", rtype, size);
- return dissect_xdr_iterable(tvb, ti, xdrs, ett, rhf, size, dissect, start);
+ return dissect_xdr_iterable(tvb, pinfo, ti, xdrs, ett, rhf, size, dissect, start);
}
static gboolean
-dissect_xdr_array(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf, gint ett,
- int rhf, const gchar *rtype, guint32 maxlen, vir_xdr_dissector_t dissect)
+dissect_xdr_array(tvbuff_t *tvb,
+ packet_info *pinfo,
+ proto_tree *tree,
+ XDR *xdrs,
+ int hf,
+ gint ett,
+ int rhf,
+ const gchar *rtype,
+ guint32 maxlen,
+ vir_xdr_dissector_t dissect)
{
goffset start;
proto_item *ti;
@@ -291,7 +336,7 @@ dissect_xdr_array(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf, gint ett,
ti = proto_tree_add_item(tree, hf, tvb, start, -1, ENC_NA);
proto_item_append_text(ti, " :: %s<%u>", rtype, length);
- return dissect_xdr_iterable(tvb, ti, xdrs, ett, rhf, length, dissect, start);
+ return dissect_xdr_iterable(tvb, pinfo, ti, xdrs, ett, rhf, length, dissect, start);
}
static vir_xdr_dissector_t
@@ -340,7 +385,10 @@ find_payload_dissector(int32_t proc,
}
static void
-dissect_libvirt_stream(tvbuff_t *tvb, proto_tree *tree, gint payload_length)
+dissect_libvirt_stream(tvbuff_t *tvb,
+ packet_info *pinfo G_GNUC_UNUSED,
+ proto_tree *tree,
+ gint payload_length)
{
proto_tree_add_item(tree, hf_libvirt_stream, tvb, VIR_HEADER_LEN,
payload_length - VIR_HEADER_LEN, ENC_NA);
@@ -357,6 +405,7 @@ dissect_libvirt_num_of_fds(tvbuff_t *tvb, proto_tree *tree)
static void
dissect_libvirt_fds(tvbuff_t *tvb G_GNUC_UNUSED,
+ packet_info *pinfo G_GNUC_UNUSED,
gint start G_GNUC_UNUSED,
gint32 nfds G_GNUC_UNUSED)
{
@@ -364,8 +413,12 @@ dissect_libvirt_fds(tvbuff_t *tvb G_GNUC_UNUSED,
}
static void
-dissect_libvirt_payload_xdr_data(tvbuff_t *tvb, proto_tree *tree, gint payload_length,
- gint32 status, vir_xdr_dissector_t dissect)
+dissect_libvirt_payload_xdr_data(tvbuff_t *tvb,
+ packet_info *pinfo,
+ proto_tree *tree,
+ gint payload_length,
+ gint32 status,
+ vir_xdr_dissector_t dissect)
{
gint32 nfds = 0;
gint start = VIR_HEADER_LEN;
@@ -384,17 +437,21 @@ dissect_libvirt_payload_xdr_data(tvbuff_t *tvb, proto_tree *tree, gint payload_l
payload_data = (caddr_t)tvb_memdup(NULL, payload_tvb, 0, payload_length);
xdrmem_create(&xdrs, payload_data, payload_length, XDR_DECODE);
- dissect(payload_tvb, tree, &xdrs, -1);
+ dissect(payload_tvb, pinfo, tree, &xdrs, -1);
xdr_destroy(&xdrs);
g_free(payload_data);
if (nfds != 0)
- dissect_libvirt_fds(tvb, start + payload_length, nfds);
+ dissect_libvirt_fds(tvb, pinfo, start + payload_length, nfds);
}
static gboolean
-dissect_xdr_stream_hole(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf)
+dissect_xdr_stream_hole(tvbuff_t *tvb,
+ packet_info *pinfo,
+ proto_tree *tree,
+ XDR *xdrs,
+ int hf)
{
goffset start;
proto_item *ti;
@@ -411,10 +468,10 @@ dissect_xdr_stream_hole(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf)
tree = proto_item_add_subtree(ti, ett_libvirt_stream_hole);
hf = hf_libvirt_stream_hole_length;
- if (!dissect_xdr_hyper(tvb, tree, xdrs, hf)) return FALSE;
+ if (!dissect_xdr_hyper(tvb, pinfo, tree, xdrs, hf)) return FALSE;
hf = hf_libvirt_stream_hole_flags;
- if (!dissect_xdr_u_int(tvb, tree, xdrs, hf)) return FALSE;
+ if (!dissect_xdr_u_int(tvb, pinfo, tree, xdrs, hf)) return FALSE;
proto_item_set_len(ti, xdr_getpos(xdrs) - start);
return TRUE;
@@ -424,6 +481,7 @@ dissect_xdr_stream_hole(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf)
static void
dissect_libvirt_payload(tvbuff_t *tvb,
+ packet_info *pinfo,
proto_tree *tree,
uint32_t prog,
int32_t proc,
@@ -447,13 +505,13 @@ dissect_libvirt_payload(tvbuff_t *tvb,
xd = find_payload_dissector(proc, type, pds, *len);
if (xd == NULL)
goto unknown;
- dissect_libvirt_payload_xdr_data(tvb, tree, payload_length, status, xd);
+ dissect_libvirt_payload_xdr_data(tvb, pinfo, tree, payload_length, status, xd);
} else if (status == VIR_NET_ERROR) {
- dissect_libvirt_payload_xdr_data(tvb, tree, payload_length, status, dissect_xdr_remote_error);
+ dissect_libvirt_payload_xdr_data(tvb, pinfo, tree, payload_length, status, dissect_xdr_remote_error);
} else if (type == VIR_NET_STREAM) { /* implicitly, status == VIR_NET_CONTINUE */
- dissect_libvirt_stream(tvb, tree, payload_length);
+ dissect_libvirt_stream(tvb, pinfo, tree, payload_length);
} else if (type == VIR_NET_STREAM_HOLE) {
- dissect_libvirt_payload_xdr_data(tvb, tree, payload_length, status, dissect_xdr_stream_hole);
+ dissect_libvirt_payload_xdr_data(tvb, pinfo, tree, payload_length, status, dissect_xdr_stream_hole);
} else {
goto unknown;
}
@@ -489,21 +547,21 @@ dissect_libvirt_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
serial = tvb_get_ntohl(tvb, offset); offset += 4;
status = tvb_get_ntohil(tvb, offset); offset += 4;
- prog_str = vir_val_to_str(prog, program_strings, "%x");
+ prog_str = vir_val_to_str(pinfo, prog, program_strings, "%x");
col_add_fstr(pinfo->cinfo, COL_INFO, "Prog=%s", prog_str);
- vir_wmem_free(prog_str);
+ vir_wmem_free(pinfo, prog_str);
vs = get_program_data(prog, VIR_PROGRAM_PROCSTRINGS);
- proc_str = vir_val_to_str(proc, vs, "%d");
+ proc_str = vir_val_to_str(pinfo, proc, vs, "%d");
col_append_fstr(pinfo->cinfo, COL_INFO, " Proc=%s", proc_str);
- vir_wmem_free(proc_str);
+ vir_wmem_free(pinfo, proc_str);
- type_str = vir_val_to_str(type, type_strings, "%d");
- status_str = vir_val_to_str(status, status_strings, "%d");
+ type_str = vir_val_to_str(pinfo, type, type_strings, "%d");
+ status_str = vir_val_to_str(pinfo, status, status_strings, "%d");
col_append_fstr(pinfo->cinfo, COL_INFO, " Type=%s Serial=%u Status=%s",
type_str, serial, status_str);
- vir_wmem_free(status_str);
- vir_wmem_free(type_str);
+ vir_wmem_free(pinfo, status_str);
+ vir_wmem_free(pinfo, type_str);
if (tree) {
gint *hf_proc;
@@ -532,21 +590,26 @@ dissect_libvirt_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
proto_tree_add_item(libvirt_tree, hf_libvirt_status, tvb, offset, 4, ENC_NA); offset += 4;
/* Dissect payload remaining */
- dissect_libvirt_payload(tvb, libvirt_tree, prog, proc, type, status);
+ dissect_libvirt_payload(tvb, pinfo, libvirt_tree, prog, proc, type, status);
}
return 0;
}
static guint
-get_message_len(packet_info *pinfo G_GNUC_UNUSED, tvbuff_t *tvb, int offset, void *data G_GNUC_UNUSED)
+get_message_len(packet_info *pinfo G_GNUC_UNUSED,
+ tvbuff_t *tvb,
+ int offset,
+ void *data G_GNUC_UNUSED)
{
return tvb_get_ntohl(tvb, offset);
}
static int
-dissect_libvirt(tvbuff_t *tvb, packet_info *pinfo,
- proto_tree *tree, void *data G_GNUC_UNUSED)
+dissect_libvirt(tvbuff_t *tvb,
+ packet_info *pinfo,
+ proto_tree *tree,
+ void *data G_GNUC_UNUSED)
{
/* Another magic const - 4; simply, how much bytes
* is needed to tell the length of libvirt packet. */
diff --git a/tools/wireshark/util/genxdrstub.pl b/tools/wireshark/util/genxdrstub.pl
index 01b663a88c..f69695c091 100755
--- a/tools/wireshark/util/genxdrstub.pl
+++ b/tools/wireshark/util/genxdrstub.pl
@@ -250,7 +250,7 @@ sub xdr_type {
sub render_caller {
my ($self, $hfid) = @_;
my $name = $c->rinc( 'dissect_xdr_'.($self->idstrip || lc($self->xdr_type)) );
- "$name(tvb, tree, xdrs, hf)";
+ "$name(tvb, pinfo, tree, xdrs, hf)";
}
sub ft_type {
@@ -345,7 +345,7 @@ BEGIN{::register_profile(
sub render_caller {
my ($self) = @_;
my ($klass) = ref($self) =~ /([^:]+)$/;
- sprintf '%s(tvb, tree, xdrs, hf, %s)',
+ sprintf '%s(tvb, pinfo, tree, xdrs, hf, %s)',
$c->rinc('dissect_xdr_'.lc($klass)),
$c->rinc('dissect_xdr_'.$self->reftype->idstrip);
}
@@ -359,7 +359,7 @@ BEGIN{::register_profile(
sub render_caller {
my ($self, $hfid) = @_;
my ($klass) = ref($self) =~ /([^:]+)$/;
- sprintf '%s(tvb, tree, xdrs, hf, %s)',
+ sprintf '%s(tvb, pinfo, tree, xdrs, hf, %s)',
$c->rinc('dissect_xdr_'.lc($klass)), $self->length || '~0';
}
@@ -447,7 +447,7 @@ BEGIN{::register_profile(
sub render_caller {
my ($self, $hfid) = @_;
my ($pname) = reverse split /__/, $hfid;
- sprintf 'dissect_xdr_array(tvb, tree, xdrs, hf, %s, %s, "%s", %s, %s)',
+ sprintf 'dissect_xdr_array(tvb, pinfo, tree, xdrs, hf, %s, %s, "%s", %s, %s)',
$c->rinc('ett_'.$self->idstrip),
$c->rinc("hf_$hfid\__$pname"),
$self->reftype->idstrip,
@@ -476,7 +476,7 @@ BEGIN{::register_profile(
sub render_caller {
my ($self, $hfid) = @_;
my ($pname) = reverse split /__/, $hfid;
- sprintf 'dissect_xdr_vector(tvb, tree, xdrs, hf, %s, %s, "%s", %s, %s)',
+ sprintf 'dissect_xdr_vector(tvb, pinfo, tree, xdrs, hf, %s, %s, "%s", %s, %s)',
$c->rinc('ett_'.$self->idstrip),
$c->rinc("hf_$hfid\__$pname"),
$self->reftype->idstrip,
@@ -857,7 +857,7 @@ __END__<<DUMMY # Dummy heredoc to disable perl syntax highlighting
my ($self, $ident) = @_;
return if $self->is_primitive;
%>
-static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf)
+static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, packet_info *pinfo G_GNUC_UNUSED, proto_tree *tree, XDR *xdrs, int hf)
{
return <%= $self->dealias->render_caller($self->ident eq $ident ? undef : $ident) %>;
}
@@ -865,7 +865,7 @@ static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, proto_tree *tree, XDR *
<% my ($self, $ident) = @_;
my $hfvar = $c->rinc('hf_'.$self->idstrip);
%>
-static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf)
+static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, packet_info *pinfo G_GNUC_UNUSED, proto_tree *tree, XDR *xdrs, int hf)
{
goffset start;
proto_item *ti;
@@ -890,7 +890,7 @@ static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, proto_tree *tree, XDR *
}
@@ Sym::Type::Enum#render_dissector
<% my ($self, $ident) = @_; %>
-static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf)
+static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, packet_info *pinfo G_GNUC_UNUSED, proto_tree *tree, XDR *xdrs, int hf)
{
goffset start;
enum { DUMMY } es;
@@ -914,7 +914,7 @@ static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, proto_tree *tree, XDR *
my ($self, $ident) = @_;
my $decl_type = $self->decl->type->idstrip;
%>
-static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, proto_tree *tree, XDR *xdrs, int hf)
+static gboolean dissect_xdr_<%= $ident %>(tvbuff_t *tvb, packet_info *pinfo G_GNUC_UNUSED, proto_tree *tree, XDR *xdrs, int hf)
{
gboolean rc = TRUE;
goffset start;
--
2.51.0
+152 -98
View File
@@ -3,15 +3,15 @@
# This spec file assumes you are building on a Fedora or RHEL version
# 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 8
%define min_fedora 37
%define min_rhel 9
%define min_fedora 41
%define arches_qemu_kvm %{ix86} x86_64 %{power64} %{arm} aarch64 s390x riscv64
%define arches_qemu_kvm %{ix86} x86_64 %{power64} aarch64 s390x riscv64
%if 0%{?rhel}
%if 0%{?rhel} > 8
%define arches_qemu_kvm x86_64 aarch64 s390x
%if 0%{?rhel} >= 10
%define arches_qemu_kvm x86_64 aarch64 s390x riscv64
%else
%define arches_qemu_kvm x86_64 %{power64} aarch64 s390x
%define arches_qemu_kvm x86_64 aarch64 s390x
%endif
%endif
@@ -32,18 +32,34 @@
%define arches_ch x86_64 aarch64
# The hypervisor drivers that run in libvirtd
%define with_qemu 0%{!?_without_qemu:1}
%define with_lxc 0%{!?_without_lxc:1}
%define with_libxl 0%{!?_without_libxl:1}
%define with_vbox 0%{!?_without_vbox:1}
%define with_ch 0%{!?_without_ch:1}
%ifarch %{arches_64bit}
%define with_qemu 0%{!?_without_qemu:1}
%else
# QEMU drops 32-bit in Fedora 44
%if 0%{?fedora} > 43
%define with_qemu 0
%else
%define with_qemu 0%{!?_without_qemu:1}
%endif
%endif
%ifarch %{arches_qemu_kvm}
%define with_qemu_kvm %{with_qemu}
%else
%define with_qemu_kvm 0
%endif
%if 0%{?fedora} >= 42
%define with_account_add 0
%else
%define with_account_add 1
%endif
%define with_qemu_tcg %{with_qemu}
# RHEL disables TCG on all architectures
@@ -66,18 +82,13 @@
%define with_storage_gluster 0%{!?_without_storage_gluster:1}
%if 0%{?rhel}
# Glusterfs has been dropped in RHEL-9, and before that
# was only enabled on arches where KVM exists
%if 0%{?rhel} > 8
%define with_storage_gluster 0
%else
%ifnarch %{arches_qemu_kvm}
%define with_storage_gluster 0
%endif
%endif
# Glusterfs has been dropped in RHEL-9.
%define with_storage_gluster 0
%endif
# Fedora has zfs-fuse
# On Fedora 43, the 'zfs-fuse' package was removed, but is obtainable via
# other means. Build the backend, but it's no longer considered to be part
# of 'daemon-driver-storage'.
%if 0%{?fedora}
%define with_storage_zfs 0%{!?_without_storage_zfs:1}
%else
@@ -86,13 +97,12 @@
%define with_storage_iscsi_direct 0%{!?_without_storage_iscsi_direct:1}
# libiscsi has been dropped in RHEL-9
%if 0%{?rhel} > 8
%if 0%{?rhel}
%define with_storage_iscsi_direct 0
%endif
# Other optional features
%define with_numactl 0%{!?_without_numactl:1}
%define with_userfaultfd_sysctl 0%{!?_without_userfaultfd_sysctl:1}
# A few optional bits off by default, we enable later
%define with_fuse 0
@@ -142,10 +152,6 @@
%define with_firewalld_zone 0%{!?_without_firewalld_zone:1}
%if 0%{?rhel} && 0%{?rhel} < 9
%define with_netcf 0%{!?_without_netcf:1}
%endif
# fuse is used to provide virtualized /proc for LXC
%if %{with_lxc}
%define with_fuse 0%{!?_without_fuse:1}
@@ -187,8 +193,7 @@
# Right now that's not the case anywhere, but things should be fine by the time
# Fedora 40 is released.
%if %{with_qemu}
# rhel-8 lacks pidfd_open
%if 0%{?fedora} || 0%{?rhel} >= 9
%if 0%{?fedora} || 0%{?rhel}
%define with_nbdkit 0%{!?_without_nbdkit:1}
# setting 'with_nbdkit_config_default' must be done only when compiling
@@ -196,7 +201,7 @@
#
# TODO: add RHEL 9 once a minor release that contains the necessary SELinux
# bits exists (we only support the most recent minor release)
%if 0%{?fedora} >= 40
%if 0%{?fedora}
%define with_nbdkit_config_default 0%{!?_without_nbdkit_config_default:1}
%endif
%endif
@@ -207,13 +212,13 @@
%endif
%define with_modular_daemons 0
%if 0%{?fedora} || 0%{?rhel} >= 9
%if 0%{?fedora} || 0%{?rhel}
%define with_modular_daemons 1
%endif
# Prefer nftables for future OS releases but keep using iptables
# for existing ones
%if 0%{?rhel} >= 10 || 0%{?fedora} >= 41
%if 0%{?rhel} >= 10 || 0%{?fedora}
%define prefer_nftables 1
%define firewall_backend_priority nftables,iptables
%else
@@ -258,19 +263,14 @@
# RHEL releases provide stable tool chains and so it is safe to turn
# compiler warning into errors without being worried about frequent
# changes in reported warnings
%if 0%{?rhel}
# changes in reported warnings. ELN is a rebuild of Rawhide so should
# be treated as unstable for this flag
%if 0%{?rhel} && !0%{?eln}
%define enable_werror -Dwerror=true
%else
%define enable_werror -Dwerror=false -Dgit_werror=disabled
%endif
# Fedora and RHEL-9 are new enough to support /dev/userfaultfd, which
# does not require enabling vm.unprivileged_userfaultfd sysctl.
%if 0%{?fedora} || 0%{?rhel} >= 9
%define with_userfaultfd_sysctl 0
%endif
%define tls_priority "@LIBVIRT,SYSTEM"
# libvirt 8.1.0 stops distributing any sysconfig files.
@@ -294,8 +294,8 @@
Summary: Library providing a simple virtualization API
Name: libvirt
Version: 11.0.0
Release: 5%{?dist}
Version: 12.0.0
Release: 3%{?dist}
License: GPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND OFL-1.1
URL: https://libvirt.org/
@@ -304,27 +304,9 @@ URL: https://libvirt.org/
%endif
Source: https://download.libvirt.org/%{?mainturl}libvirt-%{version}.tar.xz
# fix build with GCC 15
Patch: 0001-util-avoid-overflow-in-hextable-buffer.patch
Patch: 0001-storage-stop-hardcoding-paths-for-mkfs-mount-umount.patch
Patch: 0001-util-stop-hardcoding-numad-path.patch
Patch: 0001-Fix-mocking-of-virQEMUCapsProbeHVF-function.patch
# Fix dumpxml failures after migration (bz 2369243)
Patch: 0001-qemu-Be-more-forgiving-when-acquiring-QUERY-job-when.patch
# libvirt-nss stops working after network restarts (bz #2364285)
Patch: 0001-nss-Skip-empty-files-and-avoid-use-of-uninitialized-.patch
# Fix build with wireshark
Patch: 0001-wireshark-Drop-needless-declaration-of-proto_registe.patch
Patch: 0002-wireshark-Switch-header-files-to-pragma-once.patch
Patch: 0003-wireshark-Move-WIRESHARK_VERSION-macro-definition.patch
Patch: 0004-wireshark-Fix-int-type-of-some-virNetMessageHeader-m.patch
Patch: 0005-wireshark-Don-t-special-case-retval-of-get_program_d.patch
Patch: 0006-wireshark-Introduce-and-use-vir_val_to_str.patch
Patch: 0007-wireshark-Don-t-leak-column-strings.patch
Patch: 0008-wireshark-Adapt-to-wireshark-4.6.0.patch
# Fix IPv6 connections to ESXi
# Upstream in > 12.0.0
Patch: 0001-esx-Allow-connecting-to-IPv6-server.patch
Requires: libvirt-daemon = %{version}-%{release}
Requires: libvirt-daemon-config-network = %{version}-%{release}
@@ -379,7 +361,7 @@ BuildRequires: gcc
%if %{with_libxl}
BuildRequires: xen-devel
%endif
BuildRequires: glib2-devel >= 2.58
BuildRequires: glib2-devel >= 2.66
BuildRequires: libxml2-devel
BuildRequires: readline-devel
BuildRequires: pkgconfig(bash-completion) >= 2.0
@@ -399,12 +381,7 @@ BuildRequires: sanlock-devel >= 2.4
BuildRequires: libpcap-devel >= 1.5.0
BuildRequires: libnl3-devel
BuildRequires: libselinux-devel
# For modprobe
BuildRequires: kmod
BuildRequires: cyrus-sasl-devel
BuildRequires: polkit >= 0.112
# For mount/umount in FS driver
BuildRequires: util-linux
%if %{with_qemu}
# For managing ACLs
BuildRequires: libacl-devel
@@ -415,10 +392,6 @@ BuildRequires: /usr/bin/qemu-img
%if %{with_nbdkit}
BuildRequires: libnbd-devel
%endif
# For LVM drivers
BuildRequires: lvm2
# For pool type=iscsi
BuildRequires: iscsi-initiator-utils
%if %{with_storage_iscsi_direct}
# For pool type=iscsi-direct
BuildRequires: libiscsi-devel
@@ -441,7 +414,7 @@ BuildRequires: numactl-devel
%endif
BuildRequires: libcap-ng-devel >= 0.5.0
%if %{with_fuse}
BuildRequires: fuse-devel >= 2.8.6
BuildRequires: fuse3-devel
%endif
%if %{with_libssh2}
BuildRequires: libssh2-devel >= 1.3.0
@@ -458,11 +431,6 @@ BuildRequires: libwsman-devel >= 2.6.3
BuildRequires: audit-libs-devel
BuildRequires: systemtap-sdt-devel
BuildRequires: /usr/bin/dtrace
# For mount/umount in FS driver
BuildRequires: util-linux
%if %{with_numad}
BuildRequires: numad
%endif
%if %{with_wireshark}
BuildRequires: wireshark-devel
%endif
@@ -543,6 +511,8 @@ Requires: libvirt-libs = %{version}-%{release}
# Recommends here will install libvirt-client by default (if available), but
# RPM won't complain if the package is unavailable, masked, or removed later.
Recommends: libvirt-client = %{version}-%{release}
# For modprobe and rmmod
Requires: kmod
# for /sbin/ip
Requires: iproute
# for /sbin/tc
@@ -557,8 +527,10 @@ Requires(posttrans): /usr/bin/systemctl
Requires(preun): /usr/bin/systemctl
# libvirtd depends on 'messagebus' service
Requires: dbus
%if %{with_account_add}
# For uid creation during pre
Requires(pre): shadow-utils
%endif
# Needed by /usr/libexec/libvirt-guests.sh script.
%if 0%{?fedora}
Requires: gettext-runtime
@@ -585,6 +557,7 @@ resources
%package daemon-plugin-lockd
Summary: lockd client plugin for virtlockd
Requires: libvirt-libs = %{version}-%{release}
Requires: libvirt-daemon-common = %{version}-%{release}
Requires: libvirt-daemon-lock = %{version}-%{release}
%description daemon-plugin-lockd
@@ -699,7 +672,7 @@ Summary: Storage driver plugin including base backends for the libvirtd daemon
Requires: libvirt-daemon-common = %{version}-%{release}
Requires: libvirt-libs = %{version}-%{release}
Recommends: nfs-utils
# For mkfs
# For mkfs and mount/umount
Requires: util-linux
# For storage wiping with different algorithms
Requires: scrub
@@ -811,9 +784,13 @@ volumes using the ceph protocol.
Summary: Storage driver plugin for ZFS
Requires: libvirt-daemon-driver-storage-core = %{version}-%{release}
Requires: libvirt-libs = %{version}-%{release}
# Support any conforming implementation of zfs
# Starting with Fedora 43 the 'zfs-fuse' is no longer shipped but obtainable
# externally. The package builds fine without these. Users will have to provide
# their own implementation.
%if 0%{?fedora} && 0%{?fedora} < 43
Requires: /sbin/zfs
Requires: /sbin/zpool
%endif
%description daemon-driver-storage-zfs
The storage driver backend adding implementation of the storage APIs for
@@ -837,7 +814,10 @@ Requires: libvirt-daemon-driver-storage-gluster = %{version}-%{release}
%if %{with_storage_rbd}
Requires: libvirt-daemon-driver-storage-rbd = %{version}-%{release}
%endif
%if %{with_storage_zfs}
# Starting with Fedora 43 the 'zfs-fuse' is no longer shipped but obtainable
# externally. We do not want to install this as part of 'daemon-driver-storage'
# any more.
%if %{with_storage_zfs} && 0%{?fedora} && 0%{?fedora} < 43
Requires: libvirt-daemon-driver-storage-zfs = %{version}-%{release}
%endif
@@ -864,7 +844,7 @@ Requires: swtpm-tools
%if %{with_numad}
Requires: numad
%endif
%if 0%{?fedora} || 0%{?rhel} >= 9
%if 0%{?fedora} || 0%{?rhel}
Recommends: passt
Recommends: passt-selinux
%endif
@@ -1116,6 +1096,10 @@ Wireshark dissector plugin for better analysis of libvirt RPC traffic.
%package login-shell
Summary: Login shell for connecting users to an LXC container
Requires: libvirt-libs = %{version}-%{release}
%if %{with_account_add}
# For uid creation during pre
Requires(pre): shadow-utils
%endif
%description login-shell
Provides the set-uid virt-login-shell binary that is used to
@@ -1138,6 +1122,7 @@ Requires: sanlock >= 2.4
#for virt-sanlock-cleanup require augeas
Requires: augeas
Requires: libvirt-libs = %{version}-%{release}
Requires: libvirt-daemon-common = %{version}-%{release}
Obsoletes: libvirt-lock-sanlock < 9.1.0
Provides: libvirt-lock-sanlock = %{version}-%{release}
@@ -1358,12 +1343,6 @@ exit 1
%define arg_remote_mode -Dremote_default_mode=legacy
%endif
%if %{with_userfaultfd_sysctl}
%define arg_userfaultfd_sysctl -Duserfaultfd_sysctl=enabled
%else
%define arg_userfaultfd_sysctl -Duserfaultfd_sysctl=disabled
%endif
%define when %(date +"%%F-%%T")
%define where %(hostname)
%define who %{?packager}%{!?packager:Unknown}
@@ -1447,7 +1426,6 @@ export SOURCE_DATE_EPOCH=$(stat --printf='%Y' %{_specdir}/libvirt.spec)
-Dqemu_datadir=%{qemu_datadir} \
-Dtls_priority=%{tls_priority} \
-Dsysctl_config=enabled \
%{?arg_userfaultfd_sysctl} \
-Dssh_proxy=enabled \
%{?enable_werror} \
-Dexpensive_tests=enabled \
@@ -1477,6 +1455,7 @@ export SOURCE_DATE_EPOCH=$(stat --printf='%Y' %{_specdir}/libvirt.spec)
-Dblkid=disabled \
-Dcapng=disabled \
-Ddriver_bhyve=disabled \
-Ddriver_ch=disabled \
-Ddriver_hyperv=disabled \
-Ddriver_interface=disabled \
-Ddriver_libvirtd=disabled \
@@ -1534,7 +1513,6 @@ export SOURCE_DATE_EPOCH=$(stat --printf='%Y' %{_specdir}/libvirt.spec)
-Dstorage_vstorage=disabled \
-Dstorage_zfs=disabled \
-Dsysctl_config=disabled \
-Duserfaultfd_sysctl=disabled \
-Dssh_proxy=disabled \
-Dtests=disabled \
-Dudev=disabled \
@@ -1813,10 +1791,12 @@ export VIR_TEST_DEBUG=1
%pre daemon-common
%libvirt_sysconfig_pre libvirt-guests
%libvirt_systemd_oneshot_pre libvirt-guests
%if %{with_account_add}
# 'libvirt' group is just to allow password-less polkit access to libvirt
# daemons. The uid number is irrelevant, so we use dynamic allocation.
getent group libvirt >/dev/null || groupadd -r libvirt
exit 0
%endif
%posttrans daemon-common
%libvirt_sysconfig_posttrans libvirt-guests
@@ -1939,6 +1919,7 @@ exit 0
%libvirt_sysconfig_pre virtqemud
%libvirt_systemd_unix_pre virtqemud
%if %{with_account_add}
# We want soft static allocation of well-known ids, as disk images
# are commonly shared across NFS mounts by id rather than name.
# See https://docs.fedoraproject.org/en-US/packaging-guidelines/UsersAndGroups/
@@ -1954,6 +1935,7 @@ if ! getent passwd 'qemu' >/dev/null; then
fi
fi
exit 0
%endif
%posttrans daemon-driver-qemu
%libvirt_sysconfig_posttrans virtqemud
@@ -2080,8 +2062,10 @@ done
%if %{with_lxc}
%pre login-shell
%if %{with_account_add}
getent group virtlogin >/dev/null || groupadd -r virtlogin
exit 0
%endif
%endif
%endif
@@ -2125,9 +2109,11 @@ exit 0
%dir %attr(0755, root, root) %{_libdir}/libvirt/connection-driver/
%dir %attr(0755, root, root) %{_libdir}/libvirt/storage-backend/
%dir %attr(0755, root, root) %{_libdir}/libvirt/storage-file/
%dir %attr(0755, root, root) %{_libdir}/libvirt/lock-driver/
%{_datadir}/polkit-1/actions/org.libvirt.unix.policy
%{_datadir}/polkit-1/actions/org.libvirt.api.policy
%{_datadir}/polkit-1/rules.d/50-libvirt.rules
%{_sysusersdir}/libvirt.conf
%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/
%attr(0755, root, root) %{_libexecdir}/libvirt_iohelper
%attr(0755, root, root) %{_bindir}/virt-ssh-helper
@@ -2155,7 +2141,6 @@ exit 0
%{_mandir}/man8/virtlockd.8*
%files daemon-plugin-lockd
%dir %attr(0755, root, root) %{_libdir}/libvirt/lock-driver/
%attr(0755, root, root) %{_libdir}/libvirt/lock-driver/lockd.so
%files daemon-log
@@ -2294,7 +2279,6 @@ exit 0
%ghost %dir %{_rundir}/libvirt/storage/
%{_libdir}/libvirt/connection-driver/libvirt_driver_storage.so
%{_libdir}/libvirt/storage-backend/libvirt_storage_backend_fs.so
%{_libdir}/libvirt/storage-file/libvirt_storage_file_fs.so
%{_mandir}/man8/virtstoraged.8*
%files daemon-driver-storage-disk
@@ -2336,9 +2320,6 @@ exit 0
%if %{with_qemu}
%files daemon-driver-qemu
%config(noreplace) %{_sysconfdir}/libvirt/virtqemud.conf
%if %{with_userfaultfd_sysctl}
%config(noreplace) %{_prefix}/lib/sysctl.d/60-qemu-postcopy-migration.conf
%endif
%{_datadir}/augeas/lenses/virtqemud.aug
%{_datadir}/augeas/lenses/tests/test_virtqemud.aug
%{_unitdir}/virtqemud.service
@@ -2470,7 +2451,6 @@ exit 0
%if %{with_libxl}
%config(noreplace) %{_sysconfdir}/libvirt/libxl-sanlock.conf
%endif
%dir %attr(0755, root, root) %{_libdir}/libvirt/lock-driver/
%attr(0755, root, root) %{_libdir}/libvirt/lock-driver/sanlock.so
%{_datadir}/augeas/lenses/libvirt_sanlock.aug
%{_datadir}/augeas/lenses/tests/test_libvirt_sanlock.aug
@@ -2491,6 +2471,9 @@ exit 0
%{_unitdir}/virtchd.service
%{_unitdir}/virtchd.socket
%{_libdir}/libvirt/connection-driver/libvirt_driver_ch.so
%config(noreplace) %{_sysconfdir}/libvirt/ch.conf
%{_datadir}/augeas/lenses/libvirtd_ch.aug
%{_datadir}/augeas/lenses/tests/test_libvirtd_ch.aug
%endif
%files client
@@ -2553,6 +2536,7 @@ exit 0
%attr(4750, root, virtlogin) %{_bindir}/virt-login-shell
%{_libexecdir}/virt-login-shell-helper
%config(noreplace) %{_sysconfdir}/libvirt/virt-login-shell.conf
%{_sysusersdir}/libvirt-login-shell.conf
%{_mandir}/man1/virt-login-shell.1*
%endif
@@ -2711,20 +2695,90 @@ exit 0
%changelog
* Fri Oct 24 2025 Cole Robinson <crobinso@redhat.com> - 11.0.0-5
* Mon Jan 26 2026 Richard W.M. Jones <rjones@redhat.com> - 12.0.0-3
- Backport fix for IPv6 connections to ESXi
* Fri Jan 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 12.0.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
* Thu Jan 15 2026 Daniel P. Berrangé <berrange@redhat.com> - 12.0.0-1
- Update to 12.0.0
* Mon Jan 12 2026 Daniel P. Berrangé <berrange@redhat.com> - 11.10.0-3
- Disable -Werror on ELN
* Thu Jan 08 2026 Richard W.M. Jones <rjones@redhat.com> - 11.10.0-2
- Rebuild for xen 4.21.0
* Mon Dec 01 2025 Cole Robinson <crobinso@redhat.com> - 11.10.0-1
- Update to version 11.10.0
* Mon Nov 17 2025 Richard W.M. Jones <rjones@redhat.com> - 11.9.0-3
- Add upstream patches to fix parallel libguestfs
* Tue Nov 4 2025 Tom Callaway <spot@fedoraproject.org> - 11.9.0-2
- rebuild against new fuse3
* Mon Nov 3 2025 Daniel P. Berrangé <berrange@redhat.com> - 11.9.0-1
- Update to 11.9.0 release
* Wed Oct 29 2025 Peter Robinson <pbrobinson@fedoraproject.org> - 11.8.0-3
- Build against fuse3, supported since 8.2
* Tue Oct 14 2025 Cole Robinson <crobinso@redhat.com> - 11.8.0-2
- Fix build with latest wireshark
* Fri Aug 08 2025 Cole Robinson <crobinso@redhat.com> - 11.0.0-4
- libvirt-nss stops working after network restarts (bz #2364285)
* Wed Oct 01 2025 Cole Robinson <crobinso@redhat.com> - 11.8.0-1
- Update to version 11.8.0
* Fri Jun 20 2025 Cole Robinson <crobinso@redhat.com> - 11.0.0-3
* Thu Sep 04 2025 Adam Williamson <awilliam@redhat.com> - 11.7.0-3
- Rebuild on a side tag
* Thu Sep 04 2025 Adam Williamson <awilliam@redhat.com> - 11.7.0-2
- Rebuild for libiscsi.so.11
* Tue Sep 02 2025 Cole Robinson <crobinso@redhat.com> - 11.7.0-1
- Update to version 11.7.0
* Tue Aug 05 2025 Cole Robinson <crobinso@redhat.com> - 11.6.0-1
- Update to version 11.6.0
* Thu Jul 24 2025 Fedora Release Engineering <releng@fedoraproject.org> - 11.5.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Wed Jul 16 2025 Richard W.M. Jones <rjones@redhat.com> - 11.5.0-2
- Rebuild for updated Xen
* Wed Jul 09 2025 Cole Robinson <crobinso@redhat.com> - 11.5.0-1
- Update to version 11.5.0
* Fri Jun 20 2025 Cole Robinson <crobinso@redhat.com> - 11.4.0-2
- Fix dumpxml failures after migration (bz 2369243)
* Tue Apr 29 2025 Daniel P. Berrangé <berrange@redhat.com> - 11.0.0-2
* Mon Jun 02 2025 Cole Robinson <crobinso@redhat.com> - 11.4.0-1
- Update to version 11.4.0
* Thu May 08 2025 Adam Williamson <awilliam@redhat.com> - 11.3.0-3
- Properly obsolete libvirt-daemon-driver-storage-zfs
* Thu May 08 2025 Cole Robinson <crobinso@redhat.com> - 11.3.0-2
- zfs-fuse is gone from rawhide, drop libvirt-daemon-storage-zfs
* Wed May 07 2025 Cole Robinson <crobinso@redhat.com> - 11.3.0-1
- Update to version 11.3.0
* Tue Apr 29 2025 Daniel P. Berrangé <berrange@redhat.com> - 11.2.0-2
- Fix install of Ampere 1 ARM CPU model (rhbz #2361196)
- Fix location of mount, umount (rhbz #2359196)
- Fix location of numad (rhbz #2359736)
- Fix tests on rebuild with latest GCC 15
* Tue Apr 01 2025 Cole Robinson <crobinso@redhat.com> - 11.2.0-1
- Update to version 11.2.0
* Mon Mar 03 2025 Cole Robinson <crobinso@redhat.com> - 11.1.0-1
- Update to version 11.1.0
* Fri Jan 17 2025 Cole Robinson <crobinso@redhat.com> - 11.0.0-1
- Update to version 11.0.0
+1 -1
View File
@@ -1 +1 @@
SHA512 (libvirt-11.0.0.tar.xz) = ac5fd17d3f488c241017d967364e0441373e9ab0457dab1acfe84fd0b90353dc5d185cc7fcd2b0d7995af4137a3fa18371abb5511686456a9e720f7ec7829da9
SHA512 (libvirt-12.0.0.tar.xz) = 5613e4e59865f688fe4cca2734c6de1cf68d0540c6e3013c9c21e583accd4f4fc21ec98e9c794036c5d6d0c8dd05ad1d22dab61f8c7d2934c8cb507b5bee76ad