[libvirt] Bug fixing of libvirt -- attach-interface using xen driver

linxxnil linxxnil at 126.com
Fri Jan 30 09:20:23 UTC 2015


Dear:

I think there was a bug,  when attach-interface using xen driver.

when I use xen driver to attach interface for domain,  the libvirtd will crash.

the info with GDB:
#0 0x00007ffff7571815 in virDomainDiskGetDriver () from /usr/lib/libvirt.so.0 
#1 0x00007fffeb9ad471 in ?? () from /usr/lib/libvirt/connection-driver/libvirt_driver_xen.so 
#2 0x00007fffeb9b1062 in xenDaemonAttachDeviceFlags () from /usr/lib/libvirt/connection-driver/libvirt_driver_xen.so 
#3 0x00007fffeb9a8a86 in ?? () from /usr/lib/libvirt/connection-driver/libvirt_driver_xen.so 
#4 0x00007ffff7609266 in virDomainAttachDevice () from /usr/lib/libvirt.so.0 
#5 0x0000555555593c9d in ?? () 
#6 0x00007ffff76743c9 in virNetServerProgramDispatch () from /usr/lib/libvirt.so.0 
#7 0x00005555555a678d in ?? () 
#8 0x00007ffff755460e in ?? () from /usr/lib/libvirt.so.0 
#9 0x00007ffff7553b06 in ?? () from /usr/lib/libvirt.so.0 
#10 0x00007ffff4998b50 in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0 
#11 0x00007ffff46e30ed in clone () from /lib/x86_64-linux-gnu/libc.so.6 
#12 0x0000000000000000 in ?? () 

And I think the bug is at the function virDomainXMLDevID(), file path:  src/xen/xend_internal.c

--------------------------------------------------
static int
virDomainXMLDevID(virConnectPtr conn, virDomainDefPtr def, virDomainDeviceDefPtr dev, char *class,  char *ref, int ref_len)
{
    xenUnifiedPrivatePtr priv = conn->privateData;
    char *xref;
    char *tmp;
    const char *driver = virDomainDiskGetDriver(dev->data.disk);

    if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
        if (STREQ_NULLABLE(driver, "tap") || STREQ_NULLABLE(driver, "tap2"))
            strcpy(class, driver);
        else
            strcpy(class, "vbd");
-----------------------------------------------------------------
the follow line:
const char *driver = virDomainDiskGetDriver(dev->data.disk);

if the dev->data.disk not initialize before,  the libvirt will crash.

And I changed it like this :

--------------------------------------------------------------
static int
virDomainXMLDevID(virConnectPtr conn, virDomainDefPtr def, virDomainDeviceDefPtr dev, char *class,  char *ref, int ref_len)
{
    xenUnifiedPrivatePtr priv = conn->privateData;
    char *xref;
    char *tmp;

    if (dev->type == VIR_DOMAIN_DEVICE_DISK) {

        const char *driver = virDomainDiskGetDriver(dev->data.disk);

        if (STREQ_NULLABLE(driver, "tap") || STREQ_NULLABLE(driver, "tap2"))
            strcpy(class, driver);
        else
            strcpy(class, "vbd");
-------------------------------------------------------------

It works fine

Would some confirm and fix it?


Xiaolin.Su
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150130/74c7c4f4/attachment-0001.htm>


More information about the libvir-list mailing list