From 0a30b6d2e5ed301099bf215e2b24cfdd21fefbf5 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Tue, 28 Oct 2025 17:13:17 +0100 Subject: [PATCH] qemuDomainBlocksStatsGather: Fix blockstats gathering after refactor Commit 58aa005f3e95114 which refactored how block stats are stored intended to change the code path where stats for all devices are totaled together by allocating new stats object and using that but the commit forgot to actually change the pointers inside the loop. Unfortunately this was not caught by the compiler as there were pre-existing pointers of the same type with the same name, which resulted into a NULL dereference. Fixes: 58aa005f3e95114b4f2dab76ee4ade06182a3f20 Closes: https://gitlab.com/libvirt/libvirt/-/issues/827 Signed-off-by: Peter Krempa Reviewed-by: Jiri Denemark --- src/qemu/qemu_driver.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index b0eff443aa..5fe4568d98 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -9657,6 +9657,8 @@ qemuDomainBlocksStatsGather(virDomainObj *vm, g_autoptr(qemuBlockStats) stats = qemuBlockStatsNew(); for (i = 0; i < vm->def->ndisks; i++) { + qemuBlockStats *entry; + disk = vm->def->disks[i]; entryname = disk->info.alias; @@ -9670,13 +9672,13 @@ qemuDomainBlocksStatsGather(virDomainObj *vm, if (!entryname) continue; - if (!(stats = virHashLookup(blockstats, entryname))) { + if (!(entry = virHashLookup(blockstats, entryname))) { virReportError(VIR_ERR_INTERNAL_ERROR, _("cannot find statistics for device '%1$s'"), entryname); return -1; } - qemuDomainBlockStatsGatherTotals(stats, *retstats); + qemuDomainBlockStatsGatherTotals(entry, stats); } *retstats = g_steal_pointer(&stats); -- 2.47.3