diff --git a/SOURCES/kvm-migration-Read-state-once.patch b/SOURCES/kvm-migration-Read-state-once.patch new file mode 100644 index 0000000..c478b36 --- /dev/null +++ b/SOURCES/kvm-migration-Read-state-once.patch @@ -0,0 +1,75 @@ +From 70d9e1e5940c9680f574124fe8cc02e4ce97f790 Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert" +Date: Wed, 13 Apr 2022 12:33:29 +0100 +Subject: [PATCH] migration: Read state once + +RH-Author: Dr. David Alan Gilbert +RH-MergeRequest: 252: migration: Read state once +RH-Bugzilla: 2168217 +RH-Acked-by: Stefano Garzarella +RH-Acked-by: Peter Xu +RH-Acked-by: quintela1 +RH-Commit: [1/1] 3f707ccf62e5ac2973f7e8816c50cc48e0bd646c + +The 'status' field for the migration is updated normally using +an atomic operation from the migration thread. +Most readers of it aren't that careful, and in most cases it doesn't +matter. + +In query_migrate->fill_source_migration_info the 'state' +is read twice; the first time to decide which state fields to fill in, +and then secondly to copy the state to the status field; that can end up +with a status that's inconsistent; e.g. setting up the fields +for 'setup' and then having an 'active' status. In that case +libvirt gets upset by the lack of ram info. +The symptom is: + libvirt.libvirtError: internal error: migration was active, but no RAM info was set + +Read the state exactly once in fill_source_migration_info. + +This is a possible fix for: +https://bugzilla.redhat.com/show_bug.cgi?id=2074205 + +Signed-off-by: Dr. David Alan Gilbert +Message-Id: <20220413113329.103696-1-dgilbert@redhat.com> +Reviewed-by: Juan Quintela +Reviewed-by: Peter Xu +Signed-off-by: Dr. David Alan Gilbert +(cherry picked from commit 552de79bfdd5e9e53847eb3c6d6e4cd898a4370e) +--- + migration/migration.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/migration/migration.c b/migration/migration.c +index 51e6726dac..d8b24a2c91 100644 +--- a/migration/migration.c ++++ b/migration/migration.c +@@ -1071,6 +1071,7 @@ static void populate_disk_info(MigrationInfo *info) + static void fill_source_migration_info(MigrationInfo *info) + { + MigrationState *s = migrate_get_current(); ++ int state = qatomic_read(&s->state); + GSList *cur_blocker = migration_blockers; + + info->blocked_reasons = NULL; +@@ -1090,7 +1091,7 @@ static void fill_source_migration_info(MigrationInfo *info) + } + info->has_blocked_reasons = info->blocked_reasons != NULL; + +- switch (s->state) { ++ switch (state) { + case MIGRATION_STATUS_NONE: + /* no migration has happened ever */ + /* do not overwrite destination migration status */ +@@ -1135,7 +1136,7 @@ static void fill_source_migration_info(MigrationInfo *info) + info->has_status = true; + break; + } +- info->status = s->state; ++ info->status = state; + } + + typedef enum WriteTrackingSupport { +-- +2.37.3 + diff --git a/SPECS/qemu-kvm.spec b/SPECS/qemu-kvm.spec index c70600a..b51e40b 100644 --- a/SPECS/qemu-kvm.spec +++ b/SPECS/qemu-kvm.spec @@ -83,7 +83,7 @@ Obsoletes: %1-rhev <= %{epoch}:%{version}-%{release} Summary: QEMU is a machine emulator and virtualizer Name: qemu-kvm Version: 6.2.0 -Release: 21%{?rcrel}%{?dist}.2 +Release: 22%{?rcrel}%{?dist}.2 # Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped Epoch: 15 License: GPLv2 and GPLv2+ and CC-BY @@ -445,6 +445,8 @@ Patch172: kvm-hw-display-qxl-Pass-requested-buffer-size-to-qxl_phy.patch Patch173: kvm-hw-display-qxl-Avoid-buffer-overrun-in-qxl_phys2virt.patch # For bz#2152085 - CVE-2022-4144 virt:rhel/qemu-kvm: QEMU: QXL: qxl_phys2virt unsafe address translation can lead to out-of-bounds read [rhel-8] [rhel-8.7.0.z] Patch174: kvm-hw-display-qxl-Assert-memory-slot-fits-in-preallocat.patch +# For bz#2168217 - while live-migrating many instances concurrently, libvirt sometimes return internal error: migration was active, but no RAM info was set [rhel-8.7.0.z] +Patch175: kvm-migration-Read-state-once.patch BuildRequires: wget BuildRequires: rpm-build @@ -1614,6 +1616,11 @@ sh %{_sysconfdir}/sysconfig/modules/kvm.modules &> /dev/null || : %changelog +* Tue Feb 14 2023 Jon Maloy - 6.2.0-22.el8_7.2 +- kvm-migration-Read-state-once.patch [bz#2168217] +- Resolves: bz#2168217 + (while live-migrating many instances concurrently, libvirt sometimes return internal error: migration was active, but no RAM info was set [rhel-8.7.0.z]) + * Thu Dec 15 2022 Jon Maloy - 6.2.0-21.el8_7.2 - kvm-ui-vnc.c-Fixed-a-deadlock-bug.patch [bz#2148504] - kvm-hw-display-qxl-Have-qxl_log_command-Return-early-if-.patch [bz#2152085]