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

Chris Lalancette clalance at redhat.com
Wed Apr 21 18:50:18 UTC 2010


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.

-- 
Chris Lalancette




More information about the libvir-list mailing list