Bugzilla will be upgraded to version 5.0. The upgrade date is tentatively scheduled for 2 December 2018, pending final testing and feedback.
Bug 1126329 - Libvirt should forbid using relative path to the new overaly snapshot image for external snapshots
Libvirt should forbid using relative path to the new overaly snapshot image f...
Status: CLOSED ERRATA
Product: Red Hat Enterprise Linux 7
Classification: Red Hat
Component: libvirt (Show other bugs)
7.0
Unspecified Unspecified
high Severity medium
: rc
: ---
Assigned To: Peter Krempa
Virtualization Bugs
:
Depends On:
Blocks: 1127226
  Show dependency treegraph
 
Reported: 2014-08-04 04:11 EDT by Shanzhi Yu
Modified: 2015-03-05 02:41 EST (History)
6 users (show)

See Also:
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 02:41:41 EST
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)


External Trackers
Tracker ID Priority Status Summary Last Updated
Red Hat Product Errata RHSA-2015:0323 normal SHIPPED_LIVE Low: libvirt security, bug fix, and enhancement update 2015-03-05 07:10:54 EST

  None (edit)
Description Shanzhi Yu 2014-08-04 04:11:59 EDT
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:
Comment 1 Peter Krempa 2014-08-06 08:29:54 EDT
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.
Comment 2 Peter Krempa 2014-08-06 12:04:49 EDT
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
Comment 4 yangyang 2014-10-28 05:58:20 EDT
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.
Comment 6 errata-xmlrpc 2015-03-05 02:41:41 EST
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

Note You need to log in before you can comment on or make changes to this bug.