[libvirt] [PATCH 00/30] storagefile, security: qcow2 data_file support

Cole Robinson crobinso at redhat.com
Mon Oct 14 19:56:26 UTC 2019


On 10/12/19 11:07 AM, Han Han wrote:
> 
> 
> On Sat, Oct 12, 2019 at 1:05 AM Cole Robinson <crobinso at redhat.com
> <mailto:crobinso at redhat.com>> wrote:
> 
>     On 10/10/19 11:25 PM, Han Han wrote:
>     > Hi Cole,
>     > I merged crobinso/qcow2-data_file branch to 37b565c00. Reserved new
>     > capabilities introduced by these to branches to resolve conflicts.
>     > Then build and test as following:
>     > # ./autogen.sh&& ./configure --without-libssh
>     > --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu
>     > --program-prefix= --disable-dependency-tracking --prefix=/usr
>     > --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin
>     > --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include
>     > --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var
>     > --sharedstatedir=/var/lib --mandir=/usr/share/man
>     > --infodir=/usr/share/info --with-qemu --without-openvz --without-lxc
>     > --without-vbox --without-libxl --with-sasl --with-polkit
>     --with-libvirtd
>     > --without-phyp --with-esx --without-hyperv --without-vmware
>     > --without-xenapi --without-vz --without-bhyve --with-interface
>     > --with-network --with-storage-fs --with-storage-lvm
>     --with-storage-iscsi
>     > --with-storage-iscsi-direct --with-storage-scsi --with-storage-disk
>     > --with-storage-mpath --with-storage-rbd --without-storage-sheepdog
>     > --with-storage-gluster --without-storage-zfs
>     --without-storage-vstorage
>     > --with-numactl --with-numad --with-capng --without-fuse --with-netcf
>     > --with-selinux --with-selinux-mount=/sys/fs/selinux
>     --without-apparmor
>     > --without-hal --with-udev --with-yajl --with-sanlock --with-libpcap
>     > --with-macvtap --with-audit --with-dtrace --with-driver-modules
>     > --with-firewalld --with-firewalld-zone --without-wireshark-dissector
>     > --without-pm-utils --with-nss-plugin '--with-packager=Unknown,
>     > 2019-08-19-12:13:01, lab.rhel8.me <http://lab.rhel8.me>
>     <http://lab.rhel8.me>'
>     > --with-packager-version=1.el8 --with-qemu-user=qemu
>     > --with-qemu-group=qemu --with-tls-priority=@LIBVIRT,SYSTEM
>     > --enable-werror --enable-expensive-tests --with-init-script=systemd
>     > --without-login-shell && make
>     >
>     > Start libvirtd and virtlogd
>     > # LD_PRELOAD="$(find src -name '*.so.*'|tr '\n' ' ')"
>     src/.libs/libvirtd
>     > # LD_PRELOAD="$(find src -name '*.so.*'|tr '\n' ' ')" ./src/virtlogd
>     >
>     > Then try to list all domains:
>     > # virsh list --all
>     >
>     > Libvirtd exits with segment fault:
>     > [1]    30104 segmentation fault (core dumped)  LD_PRELOAD="$(find src
>     > -name '*.so.*'|tr '\n' ' ')" src/.libs/libvirtd
>     >
>     > Version:
>     > qemu-4.1
>     >
>     > Backtrace:
>     > (gdb) bt
>     > #0  0x00007fbe57a0d1b9 in virDomainVirtioSerialAddrSetAddControllers
>     > (def=<optimized out>, def=<optimized out>, addrs=<optimized out>) at
>     > conf/domain_addr.c:1656
>     > #1  virDomainVirtioSerialAddrSetCreateFromDomain
>     > (def=def at entry=0x7fbde81cc3f0) at conf/domain_addr.c:1753
>     > #2  0x00007fbe0179897e in qemuDomainAssignVirtioSerialAddresses
>     > (def=0x7fbde81cc3f0) at qemu/qemu_domain_address.c:3174
>     > #3  qemuDomainAssignAddresses (def=0x7fbde81cc3f0,
>     > qemuCaps=0x7fbde81d2210, driver=0x7fbde8126850, obj=0x0,
>     > newDomain=<optimized out>) at qemu/qemu_domain_address.c:3174
>     > #4  0x00007fbe57a39e0d in virDomainDefPostParse
>     > (def=def at entry=0x7fbde81cc3f0, caps=caps at entry=0x7fbde8154d20,
>     > parseFlags=parseFlags at entry=4610, xmlopt=xmlopt at entry=0x7fbde83ce070,
>     >      parseOpaque=parseOpaque at entry=0x0) at conf/domain_conf.c:5858
>     > #5  0x00007fbe57a525c5 in virDomainDefParseNode (xml=<optimized out>,
>     > root=0x7fbde83c5ff0, caps=0x7fbde8154d20, xmlopt=0x7fbde83ce070,
>     > parseOpaque=0x0, flags=4610) at conf/domain_conf.c:21677
>     > #6  0x00007fbe57a526c8 in virDomainDefParse (xmlStr=xmlStr at entry=0x0,
>     > filename=<optimized out>, caps=caps at entry=0x7fbde8154d20,
>     > xmlopt=xmlopt at entry=0x7fbde83ce070, parseOpaque=parseOpaque at entry=0x0,
>     >      flags=flags at entry=4610) at conf/domain_conf.c:21628
>     > #7  0x00007fbe57a528f6 in virDomainDefParseFile (filename=<optimized
>     > out>, caps=caps at entry=0x7fbde8154d20,
>     > xmlopt=xmlopt at entry=0x7fbde83ce070,
>     parseOpaque=parseOpaque at entry=0x0,
>     > flags=flags at entry=4610)
>     >      at conf/domain_conf.c:21653
>     > #8  0x00007fbe57a5e16a in virDomainObjListLoadConfig (opaque=0x0,
>     > notify=0x0, name=0x7fbde81d7ff3 "pc", autostartDir=0x7fbde8124070
>     > "/etc/libvirt/qemu/autostart", configDir=0x7fbde8124050
>     > "/etc/libvirt/qemu",
>     >      xmlopt=0x7fbde83ce070, caps=0x7fbde8154d20,
>     doms=0x7fbde8126940) at
>     > conf/virdomainobjlist.c:503
>     > #9  virDomainObjListLoadAllConfigs (doms=0x7fbde8126940,
>     > configDir=0x7fbde8124050 "/etc/libvirt/qemu",
>     > autostartDir=0x7fbde8124070 "/etc/libvirt/qemu/autostart",
>     > liveStatus=liveStatus at entry=false,
>     >      caps=0x7fbde8154d20, xmlopt=0x7fbde83ce070, notify=0x0,
>     opaque=0x0)
>     > at conf/virdomainobjlist.c:625
>     > #10 0x00007fbe017f57e2 in qemuStateInitialize (privileged=true,
>     > callback=<optimized out>, opaque=<optimized out>) at
>     > qemu/qemu_driver.c:1007
>     > #11 0x00007fbe57b8033d in virStateInitialize (privileged=true,
>     > mandatory=mandatory at entry=false,
>     callback=callback at entry=0x55dfb702ecc0
>     > <daemonInhibitCallback>, opaque=opaque at entry=0x55dfb8869d60)
>     >      at libvirt.c:666
>     > #12 0x000055dfb702ed1d in daemonRunStateInit
>     (opaque=0x55dfb8869d60) at
>     > remote/remote_daemon.c:846
>     > #13 0x00007fbe579f4be2 in virThreadHelper (data=<optimized out>) at
>     > util/virthread.c:196
>     > #14 0x00007fbe55a322de in start_thread (arg=<optimized out>) at
>     > pthread_create.c:486
>     > #15 0x00007fbe55763133 in clone () at
>     > ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
>     >
>     > Could you please check this issue?
>     > The full threads backtrace is in attachment
>     >
> 
> Hello, the git bisect shows that is the first bad commit:
> 192229f3a76ccc1b98a2c9e24f1feb0465b87a0b is the first bad commit
> commit 192229f3a76ccc1b98a2c9e24f1feb0465b87a0b
> Author: Cole Robinson <crobinso at redhat.com <mailto:crobinso at redhat.com>>
> Date:   Fri Oct 4 19:57:55 2019 -0400
> 
>     storagefile: Push extension_end calc to qcow2GetBackingStoreFormat
> 
>     This is a step towards making this qcow2GetBackingStoreFormat into
>     a generic qcow2 extensions parser
> 
>     Signed-off-by: Cole Robinson <crobinso at redhat.com
> <mailto:crobinso at redhat.com>>
> 
> 
> Steps:
> 1. Merge crobinso/qcow2-data_file branch to 37b565c00.
> 2. Copy .gdbinit to libvirt source dir. Change the arguments values of 
> check-segv.sh
> 3. Set v5.8.0 as the start of bisect. Then start bisect.
> # git bisect start HEAD v5.8.0
> # git bisect run /tmp/check-segv.sh
> 

I'm still quite confused. Maybe something I'm missing in one of these
commits is causing memory corruption that is manifesting elsewhere?

Can you provide full LIBVIRT_DEBUG=1 output when starting libvirtd? You
can use git master now because the patches have been pushed. I suggest
hosting the output somewhere rather than attaching it here, because it
will probably be large

Also, if you can pinpoint what VM XML that is being parsed when this
crashes, and post that too, it might help.

Thanks,
Cole




More information about the libvir-list mailing list