[libvirt] [PATCH 4/4] qemu: Use correct flags for ABI stability check in SaveImageUpdateDef

Martin Kletzander mkletzan at redhat.com
Tue Feb 24 13:16:04 UTC 2015


On Thu, Feb 19, 2015 at 02:13:45PM +0100, Michal Privoznik wrote:
>https://bugzilla.redhat.com/show_bug.cgi?id=1183869
>
>Soo. you've successfully started yourself a domain. And since you want

s/you/You/ at least ;)

>to use it on your host exclusively you are confident enough to
>passthrough the host CPU model, like this:
>
>  <cpu mode='host-passthrough'/>
>
>Then, after a while, you want to save the domain into a file (e.g.
>virsh save dom dom.save). And here comes the trouble. The file consist
>of two parts: Libvirt header (containing domain XML among other
>things), and qemu migration data. Now, the domain XML in the header is
>formatted using special flags (VIR_DOMAIN_XML_SECURE |
>VIR_DOMAIN_XML_UPDATE_CPU | VIR_DOMAIN_XML_INACTIVE |
>VIR_DOMAIN_XML_MIGRATABLE).
>
>Then, on your way back from the bar, you think of changing something
>in the XML in the saved file (we have a command for it after all), say
>listen address for graphics console. So you successfully type in the
>command:
>
>  virsh save-image-edit dom.save
>
>Change all the bits, and exit the editor. But instead of success
>you're left with sad error message:
>
>  error: unsupported configuration: Target CPU model <null> does not
>  match source Pentium Pro
>
>Sigh. Digging into the code you see lines, where we check for ABI
>stability. The new XML you've produced is compared with the old one
>from the saved file to see if qemu ABI will break or not. Wait, what?
>We are using different flags to parse the XML you've provided so we
>were just lucky it worked in some cases? Yep, that's right.
>

Great story, is that yours?  What bar was that? ;-)

>Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
>---
> src/qemu/qemu_driver.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
>diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>index 8f0cf2b..19dfce4 100644
>--- a/src/qemu/qemu_driver.c
>+++ b/src/qemu/qemu_driver.c
>@@ -5734,8 +5734,8 @@ qemuDomainSaveImageUpdateDef(virQEMUDriverPtr driver,
>
>     if (!(newdef_migr = qemuDomainDefCopy(driver,
>                                           newdef,
>-                                          VIR_DOMAIN_XML_MIGRATABLE |
>-                                          VIR_DOMAIN_XML_SECURE)))
>+                                          QEMU_DOMAIN_FORMAT_LIVE_FLAGS ||
>+                                          VIR_DOMAIN_XML_MIGRATABLE)))

Shouldn't there be also VIR_DOMAIN_XML_INACTIVE?  Although any live
data can't get there, can it?

ACK

>         goto cleanup;
>
>     if (!virDomainDefCheckABIStability(def, newdef_migr)) {
>--
>2.0.5
>
>--
>libvir-list mailing list
>libvir-list at redhat.com
>https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150224/dd396a08/attachment-0001.sig>


More information about the libvir-list mailing list