• M
    qemuDomainGetImageIds: Skip <seclabel/> without label · 0d93526f
    Michal Privoznik 提交于
    It's easy to shed the daemon these days. With this XML snippet:
    
        <disk type='file' device='disk'>
          <driver name='qemu' type='raw'/>
          <source file='/some/dummy/path/test.bin'>
            <seclabel model='dac' relabel='no'/>
          </source>
          <target dev='vdb' bus='virtio'/>
          <readonly/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
        </disk>
    
    I get the SIGSEGV when starting the domain. The thing is, when
    starting a domain, we check for its disk presence. For some reason,
    when determining the disk chain, we parse the <seclabel/> (don't ask
    me why). However, there's no label attribute in the XML, so we end up
    calling virParseOwnershipIds() over NULL string:
    
     [Switching to Thread 0x7ffff10c4700 (LWP 30956)]
     __strchr_sse42 () at ../sysdeps/x86_64/multiarch/strchr.S:136
     136     ../sysdeps/x86_64/multiarch/strchr.S: No such file or directory.
     (gdb) bt
     #0  __strchr_sse42 () at ../sysdeps/x86_64/multiarch/strchr.S:136
     #1  0x00007ffff749f800 in virParseOwnershipIds (label=0x0, uidPtr=uidPtr@entry=0x7ffff10c2df0, gidPtr=gidPtr@entry=0x7ffff10c2df4) at util/virutil.c:2115
     #2  0x00007fffe929f006 in qemuDomainGetImageIds (gid=0x7ffff10c2df4, uid=0x7ffff10c2df0, disk=0x7fffe40cb000, vm=0x7fffe40a6410, cfg=0x7fffe409ae00) at qemu/qemu_domain.c:2385
     #3  qemuDomainDetermineDiskChain (driver=driver@entry=0x7fffe40120e0, vm=vm@entry=0x7fffe40a6410, disk=disk@entry=0x7fffe40cb000, force=force@entry=false) at qemu/qemu_domain.c:2414
     #4  0x00007fffe929f128 in qemuDomainCheckDiskPresence (driver=driver@entry=0x7fffe40120e0, vm=vm@entry=0x7fffe40a6410, cold_boot=cold_boot@entry=true) at qemu/qemu_domain.c:2250
     #5  0x00007fffe92b6fc8 in qemuProcessStart (conn=conn@entry=0x7fffd4000b60, driver=driver@entry=0x7fffe40120e0, vm=vm@entry=0x7fffe40a6410, migrateFrom=migrateFrom@entry=0x0, stdin_fd=stdin_fd@entry=-1, stdin_path=stdin_path@entry=0x0, snapshot=snapshot@entry=0x0,
         vmop=vmop@entry=VIR_NETDEV_VPORT_PROFILE_OP_CREATE, flags=flags@entry=1) at qemu/qemu_process.c:3813
     #6  0x00007fffe93087e8 in qemuDomainObjStart (conn=0x7fffd4000b60, driver=driver@entry=0x7fffe40120e0, vm=vm@entry=0x7fffe40a6410, flags=flags@entry=0) at qemu/qemu_driver.c:6051
     #7  0x00007fffe9308e32 in qemuDomainCreateWithFlags (dom=0x7fffcc000d50, flags=0) at qemu/qemu_driver.c:6105
     #8  0x00007ffff753c5cc in virDomainCreate (domain=domain@entry=0x7fffcc000d50) at libvirt.c:8861
    Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
    0d93526f
qemu_domain.c 72.9 KB