Bug 1126329
| Summary: | Libvirt should forbid using relative path to the new overaly snapshot image for external snapshots | |||
|---|---|---|---|---|
| Product: | Red Hat Enterprise Linux 7 | Reporter: | Shanzhi Yu <shyu> | |
| Component: | libvirt | Assignee: | Peter Krempa <pkrempa> | |
| Status: | CLOSED ERRATA | QA Contact: | Virtualization Bugs <virt-bugs> | |
| Severity: | medium | Docs Contact: | ||
| Priority: | high | |||
| Version: | 7.0 | CC: | dyuan, mzhan, pkrempa, rbalakri, xuzhang, yanyang | |
| Target Milestone: | rc | |||
| Target Release: | --- | |||
| Hardware: | Unspecified | |||
| OS: | Unspecified | |||
| Whiteboard: | ||||
| Fixed In Version: | libvirt-1.2.8-1.el7 | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | ||
| Clone Of: | ||||
| : | 1127226 (view as bug list) | Environment: | ||
| Last Closed: | 2015-03-05 07:41:41 UTC | Type: | Bug | |
| Regression: | --- | Mount Type: | --- | |
| Documentation: | --- | CRM: | ||
| Verified Versions: | Category: | --- | ||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | ||
| Cloudforms Team: | --- | Target Upstream Version: | ||
| Embargoed: | ||||
| Bug Depends On: | ||||
| Bug Blocks: | 1127226 | |||
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>
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 |
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: