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.
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org