]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
rust/migration: Fix missing name in the VMSD of Migratable<>
authorZhao Liu <zhao1.liu@intel.com>
Thu, 13 Nov 2025 05:19:17 +0000 (13:19 +0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Sat, 27 Dec 2025 09:11:10 +0000 (10:11 +0100)
The VMStateDescription of Migratable<T> missed the name field, and this
casused segmentation fault in vmstate_save_state_v() when it tries to
write name field by json_writer_str().

Due to the limitation of const, a custom name based on type would be
more difficult. Instead, a straightforward and simple approach is to
have all Migratable<T> instances use the same VMSD name -
"migratable-wrapper".

This is availiable because Migratable<T> is always a field within a
VMSD, and its parent VMSD should have a distinct name.

Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
Link: https://lore.kernel.org/r/20251113051937.4017675-3-zhao1.liu@intel.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
rust/migration/src/migratable.rs

index 5700554f7eb418863ce28a4fcbad3ea20b48cb52..02efe31d72c6d44ac2ce560958fbf48713bf5d5a 100644 (file)
@@ -421,7 +421,11 @@ impl<T: 'static + ToMigrationStateShared> Migratable<T> {
         Migratable::<T>::FIELD
     };
 
+    // All Migratable<T> instances share the same name. This is fine because
+    // Migratable<T> is always a field within a VMSD. The parent VMSD has the
+    // different name to distinguish child Migratable<T>.
     const VMSD: &'static bindings::VMStateDescription = VMStateDescriptionBuilder::<Self>::new()
+        .name(c"migratable-wrapper")
         .version_id(1)
         .minimum_version_id(1)
         .pre_save(&Self::pre_save)