[libvirt] [PATCH 1/4] Make avahi startup more robust.

Chris Lalancette clalance at redhat.com
Wed Apr 21 20:17:07 UTC 2010


On 04/21/2010 04:17 PM, Daniel Veillard wrote:
> On Wed, Apr 21, 2010 at 02:50:18PM -0400, Chris Lalancette wrote:
>> On 04/21/2010 12:25 PM, Eric Blake wrote:
>>> On 04/21/2010 10:03 AM, Chris Lalancette wrote:
>>>> If the hostname of the current virtualization machine
>>>> could not be resolved, then libvirtd would fail to
>>>> start.  However, for disconnected operation (on a laptop,
>>>> for instance) the hostname may very legitimately not
>>>> be resolvable.  This patch makes it so that if we can't
>>>> resolve the hostname, avahi doesn't fail, it just uses
>>>> a less useful MDNS string.
>>>
>>> ACK on the concept, but fix the corner-case memory leak before pushing.
>>>
>>>>
>>>>          if (!mdns_name) {
>>>> -            char groupname[64], *localhost, *tmp;
>>>> +            char *groupname, *localhost, *tmp;
>>>>              /* Extract the host part of the potentially FQDN */
>>>>              localhost = virGetHostname(NULL);
>>>
>>> Here, localhost can be allocated...
>>>
>>>>              if (localhost == NULL)
>>>> +                ret = virAsprintf(&groupname, "Virtualization Host");
>>>> +            else {
>>>> +                if ((tmp = strchr(localhost, '.')))
>>>> +                    *tmp = '\0';
>>>> +                ret = virAsprintf(&groupname, "Virtualization Host %s",
>>>> +                                  localhost);
>>>
>>> then groupname fails...
>>>
>>>> +            }
>>>> +            if (ret < 0) {
>>>> +                virReportOOMError();
>>>>                  goto cleanup;
>>>
>>> ...and we leak localhost.
>>>
>>>> -
>>>> -            if ((tmp = strchr(localhost, '.')))
>>>> -                *tmp = '\0';
>>>> -            snprintf(groupname, sizeof(groupname)-1, "Virtualization Host %s", localhost);
>>>> -            groupname[sizeof(groupname)-1] = '\0';
>>>> +            }
>>>>              group = libvirtd_mdns_add_group(server->mdns, groupname);
>>>>              VIR_FREE(localhost);
>>>> +            VIR_FREE(groupname);
>>>
>>> But on success, there is no leak.
>>>
>>
>> Oops, good call.  I'll respin the patch with that change.
> 
>   Okay, but this is an important patch, I tested this too, without it if
> one cannot resolve the hostname at boot time, libvirtd service fails to
> start, while it properly starts with that patch applied. I tested it
> myself on one of my boxes where I had the trouble.
> 
>   So ACK once the leak is fixed !

I fixed the leak and pushed it.  Thanks.

-- 
Chris Lalancette




More information about the libvir-list mailing list