Bug 1198720

Summary: Libvirtd crashes when a storage file backed by gluster protocol lacking path
Product: Red Hat Enterprise Linux 7 Reporter: Jan Kurik <jkurik>
Component: libvirtAssignee: Peter Krempa <pkrempa>
Status: CLOSED ERRATA QA Contact: Virtualization Bugs <virt-bugs>
Severity: high Docs Contact:
Priority: high    
Version: 7.1CC: dyuan, jsuchane, mzhan, pkrempa, pm-eus, rbalakri, xuzhang, yanyang
Target Milestone: rcKeywords: ZStream
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: libvirt-1.2.8-16.el7_1.2 Doc Type: Bug Fix
Doc Text:
Cause: If a backing chain element would contain an invalid gluster URI (lacking the path component) libvirt would try to access it. Consequence: Libvirt would try to access the missing part of the URI and crash. Fix: Error is reported in case an invalid gluster source URI is passed to libvirt.
Story Points: ---
Clone Of: 1196528 Environment:
Last Closed: 2015-03-26 17:54:29 UTC Type: ---
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: 1196528    
Bug Blocks:    

Description Jan Kurik 2015-03-04 17:04:53 UTC
This bug has been copied from bug #1196528 and has been proposed
to be backported to 7.1 z-stream (EUS).

Comment 6 Yang Yang 2015-03-19 07:38:48 UTC
Verified with libvirt-1.2.8-16.el7_1.2.x86_64

Steps as following:
1.create gluster.img and rewrite it using a gluster path lacking of volume as backing file.

# qemu-img create -f qcow2 /var/lib/libvirt/images/gluster.img 100M
Formatting '/var/lib/libvirt/images/gluster.img', fmt=qcow2 size=104857600 encryption=off cluster_size=65536 lazy_refcounts=off 

# qemu-img rebase -u -f qcow2 -F raw -b gluster://10.66.4.164 /var/lib/libvirt/images/gluster.img 

2.# qemu-img info /var/lib/libvirt/images/gluster.img
image: /var/lib/libvirt/images/gluster.img
file format: qcow2
virtual size: 100M (104857600 bytes)
disk size: 196K
cluster_size: 65536
backing file: gluster://10.66.4.164
backing file format: raw
Format specific information:
    compat: 1.1
    lazy refcounts: false

3. # ps -ef|grep libvirtd
root      1076     1  0 15:12 ?        00:00:00 /usr/sbin/libvirtd

# virsh pool-refresh default
error: Failed to refresh pool default
error: unsupported configuration: missing volume name and path for gluster volume

# ps -ef|grep libvirtd
root      1076     1  0 15:12 ?        00:00:00 /usr/sbin/libvirtd

Libvirtd does NOT crash.

4. remove gluster.img and start default pool
# rm /var/lib/libvirt/images/gluster.img -f
# virsh pool-start default

5. create gluster.img and rewrite it using an valid path as backing file

# qemu-img create -f qcow2 /var/lib/libvirt/images/gluster.img 100M
Formatting '/var/lib/libvirt/images/gluster.img', fmt=qcow2 size=104857600 encryption=off cluster_size=65536 lazy_refcounts=off 

# qemu-img rebase -u -f qcow2 -F raw -b gluster://10.66.4.164/vol/vol /var/lib/libvirt/images/gluster.img 

6. # virsh pool-refresh default
Pool default refreshed

7. # virsh vol-list default | grep gluster
 gluster.img          /var/lib/libvirt/images/gluster.img

As libvirtd does NOT crash again, mark it as verified

Comment 8 errata-xmlrpc 2015-03-26 17:54:29 UTC
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/RHBA-2015-0742.html