[libvirt] QEMU/KVM auto-detection bug

Daniel Berrange berrange at redhat.com
Tue May 12 10:24:59 UTC 2009


On Tue, May 12, 2009 at 11:36:50AM +0200, Chris Lalancette wrote:
> All,
>      Even with Guido/Pritesh's recent changes to the vbox open routine, the
> auto-detection in libvirt is currently broken.  What happens is that in
> src/libvirt.c:do_open(), at the start of the loop to auto-detect drivers,
> ret->uri is NULL.  As each driver declines, it remains NULL.  However, the very
> first thing the vboxOpen() routine does is:
> 
>     if (conn->uri == NULL) {
>         conn->uri = xmlParseURI(uid ? "vbox:///session" : "vbox:///system");
>         if (conn->uri == NULL) {
>             return VIR_DRV_OPEN_ERROR;
>         }
> 
> So, any driver that is trying to auto-probe after vboxOpen sees a conn->uri with
> a scheme of vbox and a path of system/session, and they all fail (including
> Qemu, which is what I'm mostly concerned with at the moment).

Please re-test with the patch I posted yesterday

http://www.redhat.com/archives/libvir-list/2009-May/msg00198.html

> In point of fact, this whole auto-detection thing is fragile.  We got away with
> it before because the qemuOpen() routine bombs out before doing the whole
> conn->uri == NULL check, but in general, it's very easy for one buggy driver to
> mess up auto-detection for all drivers.

The general rule is that a driver should not set conn->uri  to non-NULL
until *after* it has determined that it can handle it.

The problem here was that virtualbox driver was setting the uri to non-NULL,
and only then seeing if virtalbox was available. My patch fixes that logic 
ordering bug
 
Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list