Red Hat Bugzilla – Bug 1126329
Libvirt should forbid using relative path to the new overaly snapshot image for external snapshots
Last modified: 2015-03-05 02:41:41 EST
Description of problem: Version-Release number of selected component (if applicable): libvirt-1.1.1-29.el7_0.1.x86_64 How reproducible: 100% Steps to Reproduce: 1. Create external disk snapshot with relative path # pwd /root # virsh snapshot-create-as rhel6 s1 --diskspec vda,file=./rhel6.s1 --disk-only Domain snapshot s1 created # virsh snapshot-dumpxml rhel6 s1 <domainsnapshot> <name>s1</name> <state>disk-snapshot</state> <creationTime>1406813388</creationTime> <memory snapshot='no'/> <disks> <disk name='vda' snapshot='external' type='file'> <driver type='qcow2'/> <source file='./rhel6.s1'/> </disk> </disks> # virsh dumpxml rhel6 .. <disk type='file' device='disk'> <driver type='qcow2' cache='none'/> <source file='./rhel6.s1'/> <backingStore type='file' index='1'> <format type='qcow2'/> <source file='/usr/local/var/lib/libvirt/images/rhel6.img'/> <backingStore/> </backingStore> <target dev='vda' bus='virtio'/> <alias name='virtio-disk0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk> .. 2. Create external disk snapshot with absolute path # virsh snapshot-create-as rhel6 s2 --diskspec vda,file=/usr/local/var/lib/libvirt/images/rhel6.s2 --disk-only Domain snapshot s2 created # virsh dumpxml rhel6 .. <disk type='file' device='disk'> <driver type='qcow2' cache='none'/> <source file='/usr/local/var/lib/libvirt/images/rhel6.s2'/> <target dev='vda' bus='virtio'/> <alias name='virtio-disk0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk> .. #qemu-img info /usr/local/var/lib/libvirt/images/rhel6.s2 image: /usr/local/var/lib/libvirt/images/rhel6.s2 file format: qcow2 virtual size: 3.9G (4194304000 bytes) disk size: 712K cluster_size: 65536 backing file: ./rhel6.s1 (actual path: /usr/local/var/lib/libvirt/images/./rhel6.s1) 3. Create external disk snapshot # virsh snapshot-create-as rhel6 s3 --disk-only error: internal error: unable to execute QEMU command 'transaction': Could not open '/usr/local/var/lib/libvirt/images/rhel6.s2': Could not open file: No such file or directory: No such file or directory # ll /usr/local/var/lib/libvirt/images/rhel6.s2 -rw-------. 1 root root 2228224 Jul 31 21:42 /usr/local/var/lib/libvirt/images/rhel6.s2 Actual results: Expected results: Additional info:
Relative paths shouldn't be used for external snapshot file names. Libvirt shouldn't allow them and to create a relatively addressed snapshot we need a different mechanism.
Fixed upstream: commit 29bb066915d0d0480b65fe404479babf5e076ac7 Author: Peter Krempa <pkrempa@redhat.com> Date: Wed Aug 6 15:17:00 2014 +0200 snapshot: conf: Enforce absolute paths on disk and memory images RNG schema as well as the qemu driver requires absolute paths for memory and disk snapshot image files but the XML parser was not enforcing it. Add checks to avoid problems in qemu where the configuration it creates is invalid. v1.2.7-13-g29bb066
Verified on libvirt-1.2.8-5.el7.x86_64 Steps: 1. prepare a running vm # virsh list --all Id Name State ---------------------------------------------------- 4 qe-con1 running 2. create external system checkpoint snapshot # virsh snapshot-create-as qe-con1 s1 --memspec file=./qe-con1.mem --diskspec vda,file=./qe-con1.s1 error: XML error: memory snapshot file path (./qe-con1.mem) must be absolute 3. create external disk only snapshot # virsh snapshot-create-as qe-con1 s1 --disk-only --diskspec vda,file=./qe-con1.s1 error: XML error: disk snapshot image path './qe-con1.s1' must be absolute 4. create snapshot with xml # cat qe-con1.s1.xml <domainsnapshot> <name>s1</name> <disks> <disk name='vda'> <source file='./qe-con1.s1'/> </disk> </disks> </domainsnapshot> # virsh snapshot-create qe-con1 qe-con1.s1.xml --disk-only error: XML error: disk snapshot image path './qe-con1.s1' must be absolute 5. create snapshot with xml # cat qe-con1.s1.xml <domainsnapshot> <name>s1</name> <memory snapshot='external' file='./qe-con1.mem'/> <disks> <disk name='vda'> <source file='./qe-con1.s1'/> </disk> </disks> </domainsnapshot> # virsh snapshot-create qe-con1 qe-con1.s1.xml error: XML error: memory snapshot file path (./qe-con1.mem) must be absolute Since all the steps got the expected results, set it to verified.
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://rhn.redhat.com/errata/RHSA-2015-0323.html