[libvirt] QEMU/KVM auto-detection bug

Chris Lalancette clalance at redhat.com
Tue May 12 12:01:20 UTC 2009


Daniel Berrange wrote:
> 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

Yeah, that seems to fix it for me.  It would still be nice to make it a little
less error-prone, but I don't have any good ideas at the moment.

Thanks!

-- 
Chris Lalancette




More information about the libvir-list mailing list