On 04/14/2011 07:29 AM, Daniel P. Berrange wrote:
>>
>> parent = virNodeDeviceGetParent(dev);
>
> ...and malloc'd on this path.
It isn't malloc'd here actually. This is returning
a 'const char *'...
Umm - libvirt.c declares it as 'const char *', but defers to the
deviceMonitor->deviceGetParent callback. And that callback returns
'char *', not 'const char *'. In turn, in
node_device_driver.c:nodeDeviceGetParent, the callback that actually
implements things is actually setting ret to at strdup() value.
Ouch - our API inherently leaks.
>
> ...and add unconditional VIR_FREE(parent) here. I'm surprised we
> haven't noticed that leak before.
..meaning it isn't actually a leak here :-)
Yes it is, by design :(
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org