From nobody Mon Feb 9 20:10:59 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) client-ip=205.139.110.120; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1593056248; cv=none; d=zohomail.com; s=zohoarc; b=eP2OtLMFCnNxfl03DwZyFAbl5FnwoR77wJoF1i7FrNmgOqh30K9W8YxM6OYagHW+oaKgC2hNRMHTEguo2ZXG4RYU/Jiz4tpFCR6Lhj6tyIJL4LlZUY/MiST9tj/35W9UM2B5Bbh7nL1yry4Sd4Acn0vzJuJzst76wuuI1CCHxXU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1593056248; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=eRJDBMU7k/YFZNGk1QQeCcUVxIbgpIkDTJZ09ekTCrU=; b=LKOHFjpBRR28BXoAJ1HqvwwKYQwP/FuOGm3Kzy6VIR5J7HVizoRxWEecNt8CSHtXhj2KqsIfLMWPX7x0UfNXQ0uLfVOPRYXUTPawajay3c7QqXyZN4MujSpLzDydxHvxbmNRWw3/1h+dDWydvrJiV8T/Otm8eoMImiqC6LZCiYY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by mx.zohomail.com with SMTPS id 1593056248420794.4681410590316; Wed, 24 Jun 2020 20:37:28 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-190-suMaNaD-Npimn1W8me7VkA-1; Wed, 24 Jun 2020 23:34:45 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id BF7E718A0768; Thu, 25 Jun 2020 03:34:36 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9A4591011396; Thu, 25 Jun 2020 03:34:36 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 6C65E87589; Thu, 25 Jun 2020 03:34:36 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 05P3YQfh007833 for ; Wed, 24 Jun 2020 23:34:26 -0400 Received: by smtp.corp.redhat.com (Postfix) id 8AF075BACC; Thu, 25 Jun 2020 03:34:26 +0000 (UTC) Received: from vhost2.laine.org (ovpn-114-28.phx2.redhat.com [10.3.114.28]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1CA7A7FD07 for ; Thu, 25 Jun 2020 03:34:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1593056247; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=eRJDBMU7k/YFZNGk1QQeCcUVxIbgpIkDTJZ09ekTCrU=; b=B4MGLj0AqkgReXAic7XGgV4nKDkBDUNq+n1xgJg2Q0pcn6Pa3wbJpctky//iEKuldCSjlP q5c/9nNXwZclgMoCoARjSYl9Kb6KHBvPH1DB+lD7Wn8ZOFyZdXXfi8+z/Fv7uqY95SBTYW xZLE9MS6iY0sChzvJ698OilOt3OOmlQ= X-MC-Unique: suMaNaD-Npimn1W8me7VkA-1 From: Laine Stump To: libvir-list@redhat.com Subject: [PATCH 10/25] network: convert local pointers to g_auto* Date: Wed, 24 Jun 2020 23:33:59 -0400 Message-Id: <20200625033414.1819594-11-laine@redhat.com> In-Reply-To: <20200625033414.1819594-1-laine@redhat.com> References: <20200625033414.1819594-1-laine@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" This includes those that use plain VIR_FREE() as well as those that have a cleanup function defined for use via g_auto/g_autoptr (virCommand, virFirewall, virBuffer, virJSONValue etc). Signed-off-by: Laine Stump --- src/network/bridge_driver.c | 477 +++++++++++------------------- src/network/bridge_driver_linux.c | 55 ++-- src/network/leaseshelper.c | 16 +- src/util/virdnsmasq.h | 4 + 4 files changed, 209 insertions(+), 343 deletions(-) diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index aff1b7b1bc..668aa9ca88 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -322,25 +322,23 @@ networkRunHook(virNetworkObjPtr obj, int sub_op) { virNetworkDefPtr def; - virBuffer buf =3D VIR_BUFFER_INITIALIZER; - char *xml =3D NULL; + g_auto(virBuffer) buf =3D VIR_BUFFER_INITIALIZER; + g_autofree char *xml =3D NULL; int hookret; - int ret =3D -1; =20 if (virHookPresent(VIR_HOOK_DRIVER_NETWORK)) { if (!obj) { VIR_DEBUG("Not running hook as @obj is NULL"); - ret =3D 0; - goto cleanup; + return 0; } def =3D virNetworkObjGetDef(obj); =20 virBufferAddLit(&buf, "\n"); virBufferAdjustIndent(&buf, 2); if (virNetworkDefFormatBuf(&buf, def, network_driver->xmlopt, 0) <= 0) - goto cleanup; + return -1; if (port && virNetworkPortDefFormatBuf(&buf, port) < 0) - goto cleanup; + return -1; =20 virBufferAdjustIndent(&buf, -2); virBufferAddLit(&buf, ""); @@ -353,16 +351,12 @@ networkRunHook(virNetworkObjPtr obj, * If the script raised an error, pass it to the callee. */ if (hookret < 0) - goto cleanup; + return -1; =20 networkNetworkObjTaint(obj, VIR_NETWORK_TAINT_HOOK); } =20 - ret =3D 0; - cleanup: - virBufferFreeAndReset(&buf); - VIR_FREE(xml); - return ret; + return 0; } =20 =20 @@ -426,44 +420,42 @@ static int networkRemoveInactive(virNetworkDriverStatePtr driver, virNetworkObjPtr obj) { - char *leasefile =3D NULL; - char *customleasefile =3D NULL; - char *radvdconfigfile =3D NULL; - char *configfile =3D NULL; - char *radvdpidbase =3D NULL; - char *statusfile =3D NULL; - char *macMapFile =3D NULL; - dnsmasqContext *dctx =3D NULL; + g_autofree char *leasefile =3D NULL; + g_autofree char *customleasefile =3D NULL; + g_autofree char *radvdconfigfile =3D NULL; + g_autofree char *configfile =3D NULL; + g_autofree char *radvdpidbase =3D NULL; + g_autofree char *statusfile =3D NULL; + g_autofree char *macMapFile =3D NULL; + g_autoptr(dnsmasqContext) dctx =3D NULL; virNetworkDefPtr def =3D virNetworkObjGetPersistentDef(obj); =20 - int ret =3D -1; - /* remove the (possibly) existing dnsmasq and radvd files */ if (!(dctx =3D dnsmasqContextNew(def->name, driver->dnsmasqStateDir))) { - goto cleanup; + return -1; } =20 if (!(leasefile =3D networkDnsmasqLeaseFileNameDefault(driver, def->na= me))) - goto cleanup; + return -1; =20 if (!(customleasefile =3D networkDnsmasqLeaseFileNameCustom(driver, de= f->bridge))) - goto cleanup; + return -1; =20 if (!(radvdconfigfile =3D networkRadvdConfigFileName(driver, def->name= ))) - goto cleanup; + return -1; =20 if (!(radvdpidbase =3D networkRadvdPidfileBasename(def->name))) - goto cleanup; + return -1; =20 if (!(configfile =3D networkDnsmasqConfigFileName(driver, def->name))) - goto cleanup; + return -1; =20 if (!(statusfile =3D virNetworkConfigFile(driver->stateDir, def->name)= )) - goto cleanup; + return -1; =20 if (!(macMapFile =3D virMacMapFileName(driver->dnsmasqStateDir, def->b= ridge))) - goto cleanup; + return -1; =20 /* dnsmasq */ dnsmasqDelete(dctx); @@ -484,18 +476,7 @@ networkRemoveInactive(virNetworkDriverStatePtr driver, /* remove the network definition */ virNetworkObjRemoveInactive(driver->networks, obj); =20 - ret =3D 0; - - cleanup: - VIR_FREE(leasefile); - VIR_FREE(configfile); - VIR_FREE(customleasefile); - VIR_FREE(radvdconfigfile); - VIR_FREE(radvdpidbase); - VIR_FREE(statusfile); - VIR_FREE(macMapFile); - dnsmasqContextFree(dctx); - return ret; + return 0; } =20 =20 @@ -545,9 +526,9 @@ networkUpdateState(virNetworkObjPtr obj, { virNetworkDefPtr def; virNetworkDriverStatePtr driver =3D opaque; - dnsmasqCapsPtr dnsmasq_caps =3D networkGetDnsmasqCaps(driver); + g_autoptr(dnsmasqCaps) dnsmasq_caps =3D networkGetDnsmasqCaps(driver); virMacMapPtr macmap; - char *macMapFile =3D NULL; + g_autofree char *macMapFile =3D NULL; int ret =3D -1; =20 virObjectLock(obj); @@ -609,7 +590,7 @@ networkUpdateState(virNetworkObjPtr obj, if (virNetworkObjIsActive(obj) && def->ips && (def->nips > 0)) { pid_t radvdPid; pid_t dnsmasqPid; - char *radvdpidbase; + g_autofree char *radvdpidbase =3D NULL; =20 ignore_value(virPidFileReadIfAlive(driver->pidDir, def->name, @@ -625,14 +606,11 @@ networkUpdateState(virNetworkObjPtr obj, radvdpidbase, &radvdPid, RADVD)); virNetworkObjSetRadvdPid(obj, radvdPid); - VIR_FREE(radvdpidbase); } =20 ret =3D 0; cleanup: virObjectUnlock(obj); - virObjectUnref(dnsmasq_caps); - VIR_FREE(macMapFile); return ret; } =20 @@ -710,9 +688,8 @@ networkStateInitialize(bool privileged, virStateInhibitCallback callback G_GNUC_UNUSED, void *opaque G_GNUC_UNUSED) { - int ret =3D VIR_DRV_STATE_INIT_ERROR; - char *configdir =3D NULL; - char *rundir =3D NULL; + g_autofree char *configdir =3D NULL; + g_autofree char *rundir =3D NULL; bool autostart =3D true; #ifdef WITH_FIREWALLD DBusConnection *sysbus =3D NULL; @@ -839,15 +816,12 @@ networkStateInitialize(bool privileged, } #endif =20 - ret =3D VIR_DRV_STATE_INIT_COMPLETE; - cleanup: - VIR_FREE(configdir); - VIR_FREE(rundir); - return ret; + return VIR_DRV_STATE_INIT_COMPLETE; + =20 error: networkStateCleanup(); - goto cleanup; + return VIR_DRV_STATE_INIT_ERROR; } =20 =20 @@ -1043,10 +1017,11 @@ networkDnsmasqConfLocalPTRs(virBufferPtr buf, { virNetworkIPDefPtr ip; size_t i; - char *ptr =3D NULL; int rc; =20 for (i =3D 0; i < def->nips; i++) { + g_autofree char *ptr =3D NULL; + ip =3D def->ips + i; =20 if (ip->localPTR !=3D VIR_TRISTATE_BOOL_YES) @@ -1067,7 +1042,6 @@ networkDnsmasqConfLocalPTRs(virBufferPtr buf, } =20 virBufferAsprintf(buf, "local=3D/%s/\n", ptr); - VIR_FREE(ptr); } =20 return 0; @@ -1083,15 +1057,14 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, dnsmasqCapsPtr caps G_GNUC_UNUSED) { virNetworkDefPtr def =3D virNetworkObjGetDef(obj); - virBuffer configbuf =3D VIR_BUFFER_INITIALIZER; - int r, ret =3D -1; + g_auto(virBuffer) configbuf =3D VIR_BUFFER_INITIALIZER; + int r; int nbleases =3D 0; size_t i; virNetworkDNSDefPtr dns =3D &def->dns; bool wantDNS =3D dns->enable !=3D VIR_TRISTATE_BOOL_NO; virNetworkIPDefPtr tmpipdef, ipdef, ipv4def, ipv6def; bool ipv6SLAAC; - char *saddr =3D NULL, *eaddr =3D NULL; =20 *configstr =3D NULL; =20 @@ -1146,12 +1119,11 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, if (fwd->domain) virBufferAsprintf(&configbuf, "/%s/", fwd->domain); if (VIR_SOCKET_ADDR_VALID(&fwd->addr)) { - char *addr =3D virSocketAddrFormat(&fwd->addr); + g_autofree char *addr =3D virSocketAddrFormat(&fwd->addr); =20 if (!addr) - goto cleanup; + return -1; virBufferAsprintf(&configbuf, "%s\n", addr); - VIR_FREE(addr); if (!fwd->domain) addNoResolv =3D true; } else { @@ -1177,7 +1149,7 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, =20 if (wantDNS && networkDnsmasqConfLocalPTRs(&configbuf, def) < 0) - goto cleanup; + return -1; =20 if (wantDNS && def->dns.forwardPlainNames =3D=3D VIR_TRISTATE_BOOL_NO)= { virBufferAddLit(&configbuf, "domain-needed\n"); @@ -1224,10 +1196,10 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, for (i =3D 0; (tmpipdef =3D virNetworkDefGetIPByIndex(def, AF_UNSPEC, i)); i++) { - char *ipaddr =3D virSocketAddrFormat(&tmpipdef->address); + g_autofree char *ipaddr =3D virSocketAddrFormat(&tmpipdef->add= ress); =20 if (!ipaddr) - goto cleanup; + return -1; =20 /* also part of CVE 2012-3411 - if the host's version of * dnsmasq doesn't have bind-dynamic, only allow listening on @@ -1250,11 +1222,9 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, "(as described in RFC1918/RFC3484/RFC4193= )."), ipaddr, (int)version / 1000000, (int)(version % 1000000) / 1000); - VIR_FREE(ipaddr); - goto cleanup; + return -1; } virBufferAsprintf(&configbuf, "listen-address=3D%s\n", ipaddr); - VIR_FREE(ipaddr); } } =20 @@ -1293,14 +1263,14 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, _("Missing required 'service' " "attribute in SRV record of network '%s'"= ), def->name); - goto cleanup; + return -1; } if (!dns->srvs[i].protocol) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Missing required 'service' " "attribute in SRV record of network '%s'"= ), def->name); - goto cleanup; + return -1; } /* RFC2782 requires that service and protocol be preceded by * an underscore. @@ -1349,7 +1319,7 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("For IPv4, multiple DHCP definitions " "cannot be specified.")); - goto cleanup; + return -1; } else { ipv4def =3D ipdef; } @@ -1369,13 +1339,13 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, (int)(version % 1000000) / 1000, DNSMASQ_DHCPv6_MAJOR_REQD, DNSMASQ_DHCPv6_MINOR_REQD); - goto cleanup; + return -1; } if (ipv6def) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("For IPv6, multiple DHCP definitions " "cannot be specified.")); - goto cleanup; + return -1; } else { ipv6def =3D ipdef; } @@ -1404,16 +1374,18 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, virReportError(VIR_ERR_INTERNAL_ERROR, _("bridge '%s' has an invalid prefix"), def->bridge); - goto cleanup; + return -1; } for (r =3D 0; r < ipdef->nranges; r++) { int thisRange; virNetworkDHCPRangeDef range =3D ipdef->ranges[r]; g_autofree char *leasetime =3D NULL; + g_autofree char *saddr =3D NULL; + g_autofree char *eaddr =3D NULL; =20 if (!(saddr =3D virSocketAddrFormat(&range.addr.start)) || !(eaddr =3D virSocketAddrFormat(&range.addr.end))) - goto cleanup; + return -1; =20 if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET6)) { virBufferAsprintf(&configbuf, "dhcp-range=3D%s,%s,%d", @@ -1428,11 +1400,11 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, _("Failed to translate bridge '%s' " "prefix %d to netmask"), def->bridge, prefix); - goto cleanup; + return -1; } =20 if (!(netmaskStr =3D virSocketAddrFormat(&netmask))) - goto cleanup; + return -1; virBufferAsprintf(&configbuf, "dhcp-range=3D%s,%s,%s", saddr, eaddr, netmaskStr); } @@ -1442,14 +1414,12 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, =20 virBufferAddLit(&configbuf, "\n"); =20 - VIR_FREE(saddr); - VIR_FREE(eaddr); thisRange =3D virSocketAddrGetRange(&range.addr.start, &range.addr.end, &ipdef->address, virNetworkIPDefPrefix(ipdef)= ); if (thisRange < 0) - goto cleanup; + return -1; nbleases +=3D thisRange; } =20 @@ -1460,19 +1430,18 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, * support) */ if (!ipdef->nranges && ipdef->nhosts) { - char *bridgeaddr =3D virSocketAddrFormat(&ipdef->address); + g_autofree char *bridgeaddr =3D virSocketAddrFormat(&ipdef->ad= dress); if (!bridgeaddr) - goto cleanup; + return -1; virBufferAsprintf(&configbuf, "dhcp-range=3D%s,static", bridgeaddr); if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET6)) virBufferAsprintf(&configbuf, ",%d", prefix); virBufferAddLit(&configbuf, "\n"); - VIR_FREE(bridgeaddr); } =20 if (networkBuildDnsmasqDhcpHostsList(dctx, ipdef) < 0) - goto cleanup; + return -1; =20 /* Note: the following is IPv4 only */ if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET)) { @@ -1488,13 +1457,12 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, =20 if (ipdef->bootfile) { if (VIR_SOCKET_ADDR_VALID(&ipdef->bootserver)) { - char *bootserver =3D virSocketAddrFormat(&ipdef->boots= erver); + g_autofree char *bootserver =3D virSocketAddrFormat(&i= pdef->bootserver); =20 if (!bootserver) - goto cleanup; + return -1; virBufferAsprintf(&configbuf, "dhcp-boot=3D%s%s%s\n", ipdef->bootfile, ",,", bootserver); - VIR_FREE(bootserver); } else { virBufferAsprintf(&configbuf, "dhcp-boot=3D%s\n", ipde= f->bootfile); } @@ -1508,7 +1476,7 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, =20 /* this is done once per interface */ if (networkBuildDnsmasqHostsList(dctx, dns) < 0) - goto cleanup; + return -1; =20 /* Even if there are currently no static hosts, if we're * listening for DHCP, we should write a 0-length hosts @@ -1539,12 +1507,11 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, (ipdef =3D virNetworkDefGetIPByIndex(def, AF_INET6, i)); i++) { if (!(ipdef->nranges || ipdef->nhosts)) { - char *bridgeaddr =3D virSocketAddrFormat(&ipdef->addre= ss); + g_autofree char *bridgeaddr =3D virSocketAddrFormat(&i= pdef->address); if (!bridgeaddr) - goto cleanup; + return -1; virBufferAsprintf(&configbuf, "dhcp-range=3D%s,ra-only\n", bridgea= ddr); - VIR_FREE(bridgeaddr); } } } @@ -1557,18 +1524,12 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, } =20 if (!(*configstr =3D virBufferContentAndReset(&configbuf))) - goto cleanup; + return -1; =20 *hostsfilestr =3D dnsmasqDhcpHostsToString(dctx->hostsfile->hosts, dctx->hostsfile->nhosts); =20 - ret =3D 0; - - cleanup: - VIR_FREE(saddr); - VIR_FREE(eaddr); - virBufferFreeAndReset(&configbuf); - return ret; + return 0; } =20 =20 @@ -1581,39 +1542,38 @@ networkBuildDhcpDaemonCommandLine(virNetworkDriverS= tatePtr driver, dnsmasqContext *dctx) { virNetworkDefPtr def =3D virNetworkObjGetDef(obj); - dnsmasqCapsPtr dnsmasq_caps =3D networkGetDnsmasqCaps(driver); - virCommandPtr cmd =3D NULL; - int ret =3D -1; - char *configfile =3D NULL; - char *configstr =3D NULL; - char *hostsfilestr =3D NULL; - char *leaseshelper_path =3D NULL; + g_autoptr(dnsmasqCaps) dnsmasq_caps =3D networkGetDnsmasqCaps(driver); + g_autoptr(virCommand) cmd =3D NULL; + g_autofree char *configfile =3D NULL; + g_autofree char *configstr =3D NULL; + g_autofree char *hostsfilestr =3D NULL; + g_autofree char *leaseshelper_path =3D NULL; =20 virNetworkObjSetDnsmasqPid(obj, -1); =20 if (networkDnsmasqConfContents(obj, pidfile, &configstr, &hostsfilestr, dctx, dnsmasq_caps) < 0) - goto cleanup; + return -1; if (!configstr) - goto cleanup; + return -1; =20 /* construct the filename */ if (!(configfile =3D networkDnsmasqConfigFileName(driver, def->name))) - goto cleanup; + return -1; =20 /* Write the file */ if (virFileWriteStr(configfile, configstr, 0600) < 0) { virReportSystemError(errno, _("couldn't write dnsmasq config file '%s'"), configfile); - goto cleanup; + return -1; } =20 /* This helper is used to create custom leases file for libvirt */ if (!(leaseshelper_path =3D virFileFindResource("libvirt_leaseshelper", abs_top_builddir "/src", LIBEXECDIR))) - goto cleanup; + return -1; =20 cmd =3D virCommandNew(dnsmasqCapsGetBinaryPath(dnsmasq_caps)); virCommandAddArgFormat(cmd, "--conf-file=3D%s", configfile); @@ -1622,15 +1582,8 @@ networkBuildDhcpDaemonCommandLine(virNetworkDriverSt= atePtr driver, virCommandAddArgFormat(cmd, "--dhcp-script=3D%s", leaseshelper_path); virCommandAddEnvPair(cmd, "VIR_BRIDGE_NAME", def->bridge); =20 - *cmdout =3D cmd; - ret =3D 0; - cleanup: - virObjectUnref(dnsmasq_caps); - VIR_FREE(configfile); - VIR_FREE(configstr); - VIR_FREE(hostsfilestr); - VIR_FREE(leaseshelper_path); - return ret; + *cmdout =3D g_steal_pointer(&cmd); + return 0; } =20 =20 @@ -1642,11 +1595,10 @@ networkStartDhcpDaemon(virNetworkDriverStatePtr dri= ver, virNetworkIPDefPtr ipdef; size_t i; bool needDnsmasq =3D false; - virCommandPtr cmd =3D NULL; - char *pidfile =3D NULL; + g_autoptr(virCommand) cmd =3D NULL; + g_autofree char *pidfile =3D NULL; pid_t dnsmasqPid; - int ret =3D -1; - dnsmasqContext *dctx =3D NULL; + g_autoptr(dnsmasqContext) dctx =3D NULL; =20 /* see if there are any IP addresses that need a dhcp server */ i =3D 0; @@ -1656,53 +1608,46 @@ networkStartDhcpDaemon(virNetworkDriverStatePtr dri= ver, needDnsmasq =3D true; } =20 - if (i =3D=3D 0) { - /* no IP addresses at all, so we don't need to run */ - ret =3D 0; - goto cleanup; - } + /* no IP addresses at all, so we don't need to run */ + if (i =3D=3D 0) + return 0; =20 - if (!needDnsmasq && def->dns.enable =3D=3D VIR_TRISTATE_BOOL_NO) { - /* no DHCP services needed, and user disabled DNS service */ - ret =3D 0; - goto cleanup; - } + /* no DHCP services needed, and user disabled DNS service */ + if (!needDnsmasq && def->dns.enable =3D=3D VIR_TRISTATE_BOOL_NO) + return 0; =20 if (virFileMakePath(driver->pidDir) < 0) { virReportSystemError(errno, _("cannot create directory %s"), driver->pidDir); - goto cleanup; + return -1; } =20 if (!(pidfile =3D virPidFileBuildPath(driver->pidDir, def->name))) - goto cleanup; + return -1; =20 if (virFileMakePath(driver->dnsmasqStateDir) < 0) { virReportSystemError(errno, _("cannot create directory %s"), driver->dnsmasqStateDir); - goto cleanup; + return -1; } =20 dctx =3D dnsmasqContextNew(def->name, driver->dnsmasqStateDir); if (dctx =3D=3D NULL) - goto cleanup; + return -1; =20 if (networkDnsmasqCapsRefresh(driver) < 0) - goto cleanup; + return -1; =20 - ret =3D networkBuildDhcpDaemonCommandLine(driver, obj, &cmd, pidfile, = dctx); - if (ret < 0) - goto cleanup; + if (networkBuildDhcpDaemonCommandLine(driver, obj, &cmd, pidfile, dctx= ) < 0) + return -1; =20 - ret =3D dnsmasqSave(dctx); - if (ret < 0) - goto cleanup; + if (dnsmasqSave(dctx) < 0) + return -1; =20 - ret =3D virCommandRun(cmd, NULL); - if (ret < 0) - goto cleanup; + if (virCommandRun(cmd, NULL) < 0) + return -1; =20 /* * There really is no race here - when dnsmasq daemonizes, its @@ -1712,17 +1657,12 @@ networkStartDhcpDaemon(virNetworkDriverStatePtr dri= ver, * pid */ =20 - ret =3D virPidFileRead(driver->pidDir, def->name, &dnsmasqPid); - if (ret < 0) - goto cleanup; + if (virPidFileRead(driver->pidDir, def->name, &dnsmasqPid) < 0) + return -1; + virNetworkObjSetDnsmasqPid(obj, dnsmasqPid); =20 - ret =3D 0; - cleanup: - VIR_FREE(pidfile); - virCommandFree(cmd); - dnsmasqContextFree(dctx); - return ret; + return 0; } =20 =20 @@ -1738,11 +1678,10 @@ networkRefreshDhcpDaemon(virNetworkDriverStatePtr d= river, virNetworkObjPtr obj) { virNetworkDefPtr def =3D virNetworkObjGetDef(obj); - int ret =3D -1; size_t i; pid_t dnsmasqPid; virNetworkIPDefPtr ipdef, ipv4def, ipv6def; - dnsmasqContext *dctx =3D NULL; + g_autoptr(dnsmasqContext) dctx =3D NULL; =20 /* if no IP addresses specified, nothing to do */ if (!virNetworkDefGetIPByIndex(def, AF_UNSPEC, 0)) @@ -1754,10 +1693,8 @@ networkRefreshDhcpDaemon(virNetworkDriverStatePtr dr= iver, return networkStartDhcpDaemon(driver, obj); =20 VIR_INFO("Refreshing dnsmasq for network %s", def->bridge); - if (!(dctx =3D dnsmasqContextNew(def->name, - driver->dnsmasqStateDir))) { - goto cleanup; - } + if (!(dctx =3D dnsmasqContextNew(def->name, driver->dnsmasqStateDir))) + return -1; =20 /* Look for first IPv4 address that has dhcp defined. * We only support dhcp-host config on one IPv4 subnetwork @@ -1780,22 +1717,20 @@ networkRefreshDhcpDaemon(virNetworkDriverStatePtr d= river, } =20 if (ipv4def && (networkBuildDnsmasqDhcpHostsList(dctx, ipv4def) < 0)) - goto cleanup; + return -1; =20 if (ipv6def && (networkBuildDnsmasqDhcpHostsList(dctx, ipv6def) < 0)) - goto cleanup; + return -1; =20 if (networkBuildDnsmasqHostsList(dctx, &def->dns) < 0) - goto cleanup; + return -1; =20 - if ((ret =3D dnsmasqSave(dctx)) < 0) - goto cleanup; + if (dnsmasqSave(dctx) < 0) + return -1; =20 dnsmasqPid =3D virNetworkObjGetDnsmasqPid(obj); - ret =3D kill(dnsmasqPid, SIGHUP); - cleanup: - dnsmasqContextFree(dctx); - return ret; + return kill(dnsmasqPid, SIGHUP); + } =20 =20 @@ -1833,8 +1768,7 @@ networkRadvdConfContents(virNetworkObjPtr obj, char **configstr) { virNetworkDefPtr def =3D virNetworkObjGetDef(obj); - virBuffer configbuf =3D VIR_BUFFER_INITIALIZER; - int ret =3D -1; + g_auto(virBuffer) configbuf =3D VIR_BUFFER_INITIALIZER; size_t i; virNetworkIPDefPtr ipdef; bool v6present =3D false, dhcp6 =3D false; @@ -1851,10 +1785,8 @@ networkRadvdConfContents(virNetworkObjPtr obj, } =20 /* If there are no IPv6 addresses, then we are done */ - if (!v6present) { - ret =3D 0; - goto cleanup; - } + if (!v6present) + return 0; =20 /* create radvd config file appropriate for this network; * IgnoreIfMissing allows radvd to start even when the bridge is down @@ -1872,33 +1804,29 @@ networkRadvdConfContents(virNetworkObjPtr obj, /* add a section for each IPv6 address in the config */ for (i =3D 0; (ipdef =3D virNetworkDefGetIPByIndex(def, AF_INET6, i));= i++) { int prefix; - char *netaddr; + g_autofree char *netaddr =3D NULL; =20 prefix =3D virNetworkIPDefPrefix(ipdef); if (prefix < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("bridge '%s' has an invalid prefix"), def->bridge); - goto cleanup; + return -1; } if (!(netaddr =3D virSocketAddrFormat(&ipdef->address))) - goto cleanup; + return -1; + virBufferAsprintf(&configbuf, " prefix %s/%d\n" " {\n%s };\n", netaddr, prefix, dhcp6 ? radvd2 : radvd3); - VIR_FREE(netaddr); } =20 virBufferAddLit(&configbuf, "};\n"); - *configstr =3D virBufferContentAndReset(&configbuf); + return 0; =20 - ret =3D 0; - cleanup: - virBufferFreeAndReset(&configbuf); - return ret; } =20 =20 @@ -1909,9 +1837,8 @@ networkRadvdConfWrite(virNetworkDriverStatePtr driver, char **configFile) { virNetworkDefPtr def =3D virNetworkObjGetDef(obj); - int ret =3D -1; - char *configStr =3D NULL; - char *myConfigFile =3D NULL; + g_autofree char *configStr =3D NULL; + g_autofree char *myConfigFile =3D NULL; =20 if (!configFile) configFile =3D &myConfigFile; @@ -1919,29 +1846,24 @@ networkRadvdConfWrite(virNetworkDriverStatePtr driv= er, *configFile =3D NULL; =20 if (networkRadvdConfContents(obj, &configStr) < 0) - goto cleanup; + return -1; =20 - if (!configStr) { - ret =3D 0; - goto cleanup; - } + if (!configStr) + return 0; =20 /* construct the filename */ if (!(*configFile =3D networkRadvdConfigFileName(driver, def->name))) - goto cleanup; + return -1; + /* write the file */ if (virFileWriteStr(*configFile, configStr, 0600) < 0) { virReportSystemError(errno, _("couldn't write radvd config file '%s'"), *configFile); - goto cleanup; + return -1; } =20 - ret =3D 0; - cleanup: - VIR_FREE(configStr); - VIR_FREE(myConfigFile); - return ret; + return 0; } =20 =20 @@ -1950,26 +1872,22 @@ networkStartRadvd(virNetworkDriverStatePtr driver, virNetworkObjPtr obj) { virNetworkDefPtr def =3D virNetworkObjGetDef(obj); - dnsmasqCapsPtr dnsmasq_caps =3D networkGetDnsmasqCaps(driver); + g_autoptr(dnsmasqCaps) dnsmasq_caps =3D networkGetDnsmasqCaps(driver); pid_t radvdPid; - char *pidfile =3D NULL; - char *radvdpidbase =3D NULL; - char *configfile =3D NULL; - virCommandPtr cmd =3D NULL; - int ret =3D -1; + g_autofree char *pidfile =3D NULL; + g_autofree char *radvdpidbase =3D NULL; + g_autofree char *configfile =3D NULL; + g_autoptr(virCommand) cmd =3D NULL; =20 virNetworkObjSetRadvdPid(obj, -1); =20 /* Is dnsmasq handling RA? */ - if (DNSMASQ_RA_SUPPORT(dnsmasq_caps)) { - ret =3D 0; - goto cleanup; - } + if (DNSMASQ_RA_SUPPORT(dnsmasq_caps)) + return 0; =20 if (!virNetworkDefGetIPByIndex(def, AF_INET6, 0)) { /* no IPv6 addresses, so we don't need to run radvd */ - ret =3D 0; - goto cleanup; + return 0; } =20 if (!virFileIsExecutable(RADVD)) { @@ -1977,30 +1895,32 @@ networkStartRadvd(virNetworkDriverStatePtr driver, _("Cannot find %s - " "Possibly the package isn't installed"), RADVD); - goto cleanup; + return -1; } =20 if (virFileMakePath(driver->pidDir) < 0) { virReportSystemError(errno, _("cannot create directory %s"), driver->pidDir); - goto cleanup; + return -1; } + if (virFileMakePath(driver->radvdStateDir) < 0) { virReportSystemError(errno, _("cannot create directory %s"), driver->radvdStateDir); - goto cleanup; + return -1; } =20 /* construct pidfile name */ if (!(radvdpidbase =3D networkRadvdPidfileBasename(def->name))) - goto cleanup; + return -1; + if (!(pidfile =3D virPidFileBuildPath(driver->pidDir, radvdpidbase))) - goto cleanup; + return -1; =20 if (networkRadvdConfWrite(driver, obj, &configfile) < 0) - goto cleanup; + return -1; =20 /* prevent radvd from daemonizing itself with "--debug 1", and use * a dummy pidfile name - virCommand will create the pidfile we @@ -2020,20 +1940,13 @@ networkStartRadvd(virNetworkDriverStatePtr driver, virCommandDaemonize(cmd); =20 if (virCommandRun(cmd, NULL) < 0) - goto cleanup; + return -1; =20 if (virPidFileRead(driver->pidDir, radvdpidbase, &radvdPid) < 0) - goto cleanup; - virNetworkObjSetRadvdPid(obj, radvdPid); + return -1; =20 - ret =3D 0; - cleanup: - virObjectUnref(dnsmasq_caps); - virCommandFree(cmd); - VIR_FREE(configfile); - VIR_FREE(radvdpidbase); - VIR_FREE(pidfile); - return ret; + virNetworkObjSetRadvdPid(obj, radvdPid); + return 0; } =20 =20 @@ -2042,14 +1955,13 @@ networkRefreshRadvd(virNetworkDriverStatePtr driver, virNetworkObjPtr obj) { virNetworkDefPtr def =3D virNetworkObjGetDef(obj); - dnsmasqCapsPtr dnsmasq_caps =3D networkGetDnsmasqCaps(driver); + g_autoptr(dnsmasqCaps) dnsmasq_caps =3D networkGetDnsmasqCaps(driver); g_autofree char *radvdpidbase =3D NULL; g_autofree char *pidfile =3D NULL; pid_t radvdPid; =20 /* Is dnsmasq handling RA? */ if (DNSMASQ_RA_SUPPORT(dnsmasq_caps)) { - virObjectUnref(dnsmasq_caps); if ((radvdpidbase =3D networkRadvdPidfileBasename(def->name)) && (pidfile =3D virPidFileBuildPath(driver->pidDir, radvdpidbase)= )) { /* radvd should not be running but in case it is */ @@ -2058,7 +1970,6 @@ networkRefreshRadvd(virNetworkDriverStatePtr driver, } return 0; } - virObjectUnref(dnsmasq_caps); =20 /* if there's no running radvd, just start it */ radvdPid =3D virNetworkObjGetRadvdPid(obj); @@ -2250,8 +2161,7 @@ static int networkSetIPv6Sysctls(virNetworkObjPtr obj) { virNetworkDefPtr def =3D virNetworkObjGetDef(obj); - char *field =3D NULL; - int ret =3D -1; + g_autofree char *field =3D NULL; bool enableIPv6 =3D !!virNetworkDefGetIPByIndex(def, AF_INET6, 0); =20 /* set disable_ipv6 if there are no ipv6 addresses defined for the @@ -2265,17 +2175,15 @@ networkSetIPv6Sysctls(virNetworkObjPtr obj) if (!enableIPv6) VIR_DEBUG("ipv6 appears to already be disabled on %s", def->bridge); - ret =3D 0; - goto cleanup; + return 0; } =20 if (virFileWriteStr(field, enableIPv6 ? "0" : "1", 0) < 0) { virReportSystemError(errno, _("cannot write to %s to enable/disable IPv6 " "on bridge %s"), field, def->bridge); - goto cleanup; + return -1; } - VIR_FREE(field); =20 /* The rest of the ipv6 sysctl tunables should always be set the * same, whether or not we're using ipv6 on this bridge. @@ -2284,31 +2192,29 @@ networkSetIPv6Sysctls(virNetworkObjPtr obj) /* Prevent guests from hijacking the host network by sending out * their own router advertisements. */ + VIR_FREE(field); field =3D g_strdup_printf(SYSCTL_PATH "/net/ipv6/conf/%s/accept_ra", def->bridge); =20 if (virFileWriteStr(field, "0", 0) < 0) { virReportSystemError(errno, _("cannot disable %s"), field); - goto cleanup; + return -1; } - VIR_FREE(field); =20 /* All interfaces used as a gateway (which is what this is, by * definition), must always have autoconf=3D0. */ + VIR_FREE(field); field =3D g_strdup_printf(SYSCTL_PATH "/net/ipv6/conf/%s/autoconf", de= f->bridge); =20 if (virFileWriteStr(field, "0", 0) < 0) { virReportSystemError(errno, _("cannot disable %s"), field); - goto cleanup; + return -1; } =20 - ret =3D 0; - cleanup: - VIR_FREE(field); - return ret; + return 0; } =20 =20 @@ -2386,7 +2292,8 @@ networkWaitDadFinish(virNetworkObjPtr obj) { virNetworkDefPtr def =3D virNetworkObjGetDef(obj); virNetworkIPDefPtr ipdef; - virSocketAddrPtr *addrs =3D NULL, addr =3D NULL; + g_autofree virSocketAddrPtr *addrs =3D NULL; + virSocketAddrPtr addr =3D NULL; size_t naddrs =3D 0; int ret =3D -1; =20 @@ -2401,7 +2308,6 @@ networkWaitDadFinish(virNetworkObjPtr obj) ret =3D (naddrs =3D=3D 0) ? 0 : virNetDevIPWaitDadFinish(addrs, naddrs= ); =20 cleanup: - VIR_FREE(addrs); VIR_DEBUG("Finished waiting for IPv6 DAD on network %s with status %d", def->name, ret); return ret; @@ -2418,9 +2324,9 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr d= river, virErrorPtr save_err =3D NULL; virNetworkIPDefPtr ipdef; virNetDevIPRoutePtr routedef; - char *macTapIfName =3D NULL; + g_autofree char *macTapIfName =3D NULL; virMacMapPtr macmap; - char *macMapFile =3D NULL; + g_autofree char *macMapFile =3D NULL; int tapfd =3D -1; bool dnsmasqStarted =3D false; bool devOnline =3D false; @@ -2467,7 +2373,6 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr d= river, VIR_NETDEV_TAP_CREATE_USE_MAC_F= OR_BRIDGE | VIR_NETDEV_TAP_CREATE_IFUP | VIR_NETDEV_TAP_CREATE_PERSIST) = < 0) { - VIR_FREE(macTapIfName); goto error; } } @@ -2583,9 +2488,6 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr d= river, if (virNetDevBandwidthSet(def->bridge, def->bandwidth, true, true) < 0) goto error; =20 - VIR_FREE(macTapIfName); - VIR_FREE(macMapFile); - return 0; =20 error: @@ -2609,10 +2511,8 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr = driver, if (macTapIfName) { VIR_FORCE_CLOSE(tapfd); ignore_value(virNetDevTapDelete(macTapIfName, NULL)); - VIR_FREE(macTapIfName); } virNetworkObjUnrefMacMap(obj); - VIR_FREE(macMapFile); =20 ignore_value(virNetDevBridgeDelete(def->bridge)); =20 @@ -2637,14 +2537,12 @@ networkShutdownNetworkVirtual(virNetworkDriverState= Ptr driver, =20 radvdPid =3D virNetworkObjGetRadvdPid(obj); if (radvdPid > 0) { - char *radvdpidbase; + g_autofree char *radvdpidbase =3D NULL; =20 kill(radvdPid, SIGTERM); /* attempt to delete the pidfile we created */ - if ((radvdpidbase =3D networkRadvdPidfileBasename(def->name))) { + if ((radvdpidbase =3D networkRadvdPidfileBasename(def->name))) virPidFileDelete(driver->pidDir, radvdpidbase); - VIR_FREE(radvdpidbase); - } } =20 dnsmasqPid =3D virNetworkObjGetDnsmasqPid(obj); @@ -2652,11 +2550,9 @@ networkShutdownNetworkVirtual(virNetworkDriverStateP= tr driver, kill(dnsmasqPid, SIGTERM); =20 if (def->mac_specified) { - char *macTapIfName =3D networkBridgeDummyNicName(def->bridge); - if (macTapIfName) { + g_autofree char *macTapIfName =3D networkBridgeDummyNicName(def->b= ridge); + if (macTapIfName) ignore_value(virNetDevTapDelete(macTapIfName, NULL)); - VIR_FREE(macTapIfName); - } } =20 ignore_value(virNetDevSetOnline(def->bridge, 0)); @@ -2963,7 +2859,7 @@ networkShutdownNetwork(virNetworkDriverStatePtr drive= r, { virNetworkDefPtr def =3D virNetworkObjGetDef(obj); int ret =3D 0; - char *stateFile; + g_autofree char *stateFile =3D NULL; =20 VIR_INFO("Shutting down network '%s'", def->name); =20 @@ -2975,7 +2871,6 @@ networkShutdownNetwork(virNetworkDriverStatePtr drive= r, return -1; =20 unlink(stateFile); - VIR_FREE(stateFile); =20 switch ((virNetworkForwardType) def->forward.type) { =20 @@ -3247,8 +3142,7 @@ static int networkFindUnusedBridgeName(virNetworkObjListPtr nets, virNetworkDefPtr def) { - int ret =3D -1, id =3D 0; - char *newname =3D NULL; + int id =3D 0; const char *templ =3D "virbr%d"; const char *p; =20 @@ -3258,7 +3152,8 @@ networkFindUnusedBridgeName(virNetworkObjListPtr nets, templ =3D def->bridge; =20 do { - newname =3D g_strdup_printf(templ, id); + g_autofree char *newname =3D g_strdup_printf(templ, id); + /* check if this name is used in another libvirt network or * there is an existing device with that name. ignore errors * from virNetDevExists(), just in case it isn't implemented @@ -3267,21 +3162,15 @@ networkFindUnusedBridgeName(virNetworkObjListPtr ne= ts, if (!(virNetworkObjBridgeInUse(nets, newname, def->name) || virNetDevExists(newname) =3D=3D 1)) { VIR_FREE(def->bridge); /*could contain template */ - def->bridge =3D newname; - ret =3D 0; - goto cleanup; + def->bridge =3D g_steal_pointer(&newname); + return 0; } - VIR_FREE(newname); } while (++id <=3D MAX_BRIDGE_ID); =20 virReportError(VIR_ERR_INTERNAL_ERROR, _("Bridge generation exceeded max id %d"), MAX_BRIDGE_ID); - ret =3D 0; - cleanup: - if (ret < 0) - VIR_FREE(newname); - return ret; + return -1; } =20 =20 @@ -3424,7 +3313,7 @@ networkValidate(virNetworkDriverStatePtr driver, */ for (i =3D 0; i < def->forward.nifs; i++) { virNetworkForwardIfDefPtr iface =3D &def->forward.ifs[i]; - char *sysfs_path =3D NULL; + g_autofree char *sysfs_path =3D NULL; =20 switch ((virNetworkForwardHostdevDeviceType)iface->type) { case VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV: @@ -3465,10 +3354,8 @@ networkValidate(virNetworkDriverStatePtr driver, _("device '%s' in network '%s' is not " "an SR-IOV Virtual Function"), sysfs_path, def->name); - VIR_FREE(sysfs_path); return -1; } - VIR_FREE(sysfs_path); break; } =20 @@ -4144,7 +4031,8 @@ networkSetAutostart(virNetworkPtr net, virNetworkDriverStatePtr driver =3D networkGetDriver(); virNetworkObjPtr obj; virNetworkDefPtr def; - char *configFile =3D NULL, *autostartLink =3D NULL; + g_autofree char *configFile =3D NULL; + g_autofree char *autostartLink =3D NULL; bool new_autostart; bool cur_autostart; int ret =3D -1; @@ -4201,8 +4089,6 @@ networkSetAutostart(virNetworkPtr net, ret =3D 0; =20 cleanup: - VIR_FREE(configFile); - VIR_FREE(autostartLink); virNetworkObjEndAPI(&obj); return ret; } @@ -4224,12 +4110,12 @@ networkGetDHCPLeases(virNetworkPtr net, long long currtime =3D 0; long long expirytime_tmp =3D -1; bool ipv6 =3D false; - char *lease_entries =3D NULL; - char *custom_lease_file =3D NULL; + g_autofree char *lease_entries =3D NULL; + g_autofree char *custom_lease_file =3D NULL; const char *ip_tmp =3D NULL; const char *mac_tmp =3D NULL; virJSONValuePtr lease_tmp =3D NULL; - virJSONValuePtr leases_array =3D NULL; + g_autoptr(virJSONValue) leases_array =3D NULL; virNetworkIPDefPtr ipdef_tmp =3D NULL; virNetworkDHCPLeasePtr lease =3D NULL; virNetworkDHCPLeasePtr *leases_ret =3D NULL; @@ -4384,10 +4270,6 @@ networkGetDHCPLeases(virNetworkPtr net, =20 cleanup: VIR_FREE(lease); - VIR_FREE(lease_entries); - VIR_FREE(custom_lease_file); - virJSONValueFree(leases_array); - virNetworkObjEndAPI(&obj); =20 return rv; @@ -5582,7 +5464,7 @@ networkPortSetParameters(virNetworkPortPtr port, virNetworkDefPtr def; virNetworkPortDefPtr portdef; virNetDevBandwidthPtr bandwidth =3D NULL; - char *dir =3D NULL; + g_autofree char *dir =3D NULL; int ret =3D -1; size_t i; =20 @@ -5660,7 +5542,6 @@ networkPortSetParameters(virNetworkPortPtr port, cleanup: virNetDevBandwidthFree(bandwidth); virNetworkObjEndAPI(&obj); - VIR_FREE(dir); return ret; } =20 diff --git a/src/network/bridge_driver_linux.c b/src/network/bridge_driver_= linux.c index 30f6aa8fe1..0d0ac730f2 100644 --- a/src/network/bridge_driver_linux.c +++ b/src/network/bridge_driver_linux.c @@ -217,14 +217,15 @@ void networkPostReloadFirewallRules(bool startup G_GN= UC_UNUSED) */ int networkCheckRouteCollision(virNetworkDefPtr def) { - int ret =3D 0, len; - char *cur, *buf =3D NULL; + int len; + char *cur; + g_autofree char *buf =3D NULL; /* allow for up to 100000 routes (each line is 128 bytes) */ enum {MAX_ROUTE_SIZE =3D 128*100000}; =20 /* Read whole routing table into memory */ if ((len =3D virFileReadAll(PROC_NET_ROUTE, MAX_ROUTE_SIZE, &buf)) < 0) - goto out; + return 0; =20 /* Dropping the last character shouldn't hurt */ if (len > 0) @@ -233,7 +234,7 @@ int networkCheckRouteCollision(virNetworkDefPtr def) VIR_DEBUG("%s output:\n%s", PROC_NET_ROUTE, buf); =20 if (!STRPREFIX(buf, "Iface")) - goto out; + return 0; =20 /* First line is just headings, skip it */ cur =3D strchr(buf, '\n'); @@ -295,8 +296,7 @@ int networkCheckRouteCollision(virNetworkDefPtr def) virReportError(VIR_ERR_INTERNAL_ERROR, _("Network is already in use by interface %= s"), iface); - ret =3D -1; - goto out; + return -1; } } =20 @@ -315,23 +315,19 @@ int networkCheckRouteCollision(virNetworkDefPtr def) =20 if ((r_addr.data.inet4.sin_addr.s_addr =3D=3D addr_val) && (r_mask.data.inet4.sin_addr.s_addr =3D=3D mask_val)) { - char *addr_str =3D virSocketAddrFormat(&r_addr); + g_autofree char *addr_str =3D virSocketAddrFormat(&r_addr); if (!addr_str) virResetLastError(); virReportError(VIR_ERR_INTERNAL_ERROR, _("Route address '%s' conflicts " "with IP address for '%s'"), NULLSTR(addr_str), iface); - VIR_FREE(addr_str); - ret =3D -1; - goto out; + return -1; } } } =20 - out: - VIR_FREE(buf); - return ret; + return 0; } =20 static const char networkLocalMulticastIPv4[] =3D "224.0.0.0/24"; @@ -838,8 +834,7 @@ int networkAddFirewallRules(virNetworkDefPtr def) { size_t i; virNetworkIPDefPtr ipdef; - virFirewallPtr fw =3D NULL; - int ret =3D -1; + g_autoptr(virFirewall) fw =3D NULL; =20 if (virOnce(&createdOnce, networkSetupPrivateChains) < 0) return -1; @@ -869,11 +864,11 @@ int networkAddFirewallRules(virNetworkDefPtr def) _("zone %s requested for network %s " "but firewalld is not active"), def->bridgeZone, def->name); - goto cleanup; + return -1; } =20 if (virFirewallDInterfaceSetZone(def->bridge, def->bridgeZone) < 0) - goto cleanup; + return -1; =20 } else { =20 @@ -893,13 +888,13 @@ int networkAddFirewallRules(virNetworkDefPtr def) */ if (virFirewallDZoneExists("libvirt")) { if (virFirewallDInterfaceSetZone(def->bridge, "libvirt") <= 0) - goto cleanup; + return -1; } else { unsigned long version; int vresult =3D virFirewallDGetVersion(&version); =20 if (vresult < 0) - goto cleanup; + return -1; =20 /* Support for nftables backend was added in firewalld * 0.6.0. Support for rule priorities (required by the @@ -919,7 +914,7 @@ int networkAddFirewallRules(virNetworkDefPtr def) "version supporting rule priorities " "(0.7.0+) and/or rebuilding " "libvirt with --with-firewalld-zone")= ); - goto cleanup; + return -1; } } } @@ -935,7 +930,7 @@ int networkAddFirewallRules(virNetworkDefPtr def) (ipdef =3D virNetworkDefGetIPByIndex(def, AF_UNSPEC, i)); i++) { if (networkAddIPSpecificFirewallRules(fw, def, ipdef) < 0) - goto cleanup; + return -1; } =20 virFirewallStartRollback(fw, 0); @@ -944,7 +939,7 @@ int networkAddFirewallRules(virNetworkDefPtr def) (ipdef =3D virNetworkDefGetIPByIndex(def, AF_UNSPEC, i)); i++) { if (networkRemoveIPSpecificFirewallRules(fw, def, ipdef) < 0) - goto cleanup; + return -1; } networkRemoveGeneralFirewallRules(fw, def); =20 @@ -952,12 +947,9 @@ int networkAddFirewallRules(virNetworkDefPtr def) networkAddChecksumFirewallRules(fw, def); =20 if (virFirewallApply(fw) < 0) - goto cleanup; + return -1; =20 - ret =3D 0; - cleanup: - virFirewallFree(fw); - return ret; + return 0; } =20 /* Remove all rules for all ip addresses (and general rules) on a network = */ @@ -965,9 +957,7 @@ void networkRemoveFirewallRules(virNetworkDefPtr def) { size_t i; virNetworkIPDefPtr ipdef; - virFirewallPtr fw =3D NULL; - - fw =3D virFirewallNew(); + g_autoptr(virFirewall) fw =3D virFirewallNew(); =20 virFirewallStartTransaction(fw, VIR_FIREWALL_TRANSACTION_IGNORE_ERRORS= ); networkRemoveChecksumFirewallRules(fw, def); @@ -978,12 +968,9 @@ void networkRemoveFirewallRules(virNetworkDefPtr def) (ipdef =3D virNetworkDefGetIPByIndex(def, AF_UNSPEC, i)); i++) { if (networkRemoveIPSpecificFirewallRules(fw, def, ipdef) < 0) - goto cleanup; + return; } networkRemoveGeneralFirewallRules(fw, def); =20 virFirewallApply(fw); - - cleanup: - virFirewallFree(fw); } diff --git a/src/network/leaseshelper.c b/src/network/leaseshelper.c index 2b5fc0f442..732dd09610 100644 --- a/src/network/leaseshelper.c +++ b/src/network/leaseshelper.c @@ -82,8 +82,8 @@ VIR_ENUM_IMPL(virLeaseAction, int main(int argc, char **argv) { - char *pid_file =3D NULL; - char *custom_lease_file =3D NULL; + g_autofree char *pid_file =3D NULL; + g_autofree char *custom_lease_file =3D NULL; const char *ip =3D NULL; const char *mac =3D NULL; const char *leases_str =3D NULL; @@ -91,13 +91,13 @@ main(int argc, char **argv) const char *clientid =3D getenv("DNSMASQ_CLIENT_ID"); const char *interface =3D getenv("DNSMASQ_INTERFACE"); const char *hostname =3D getenv("DNSMASQ_SUPPLIED_HOSTNAME"); - char *server_duid =3D NULL; + g_autofree char *server_duid =3D NULL; int action =3D -1; int pid_file_fd =3D -1; int rv =3D EXIT_FAILURE; bool delete =3D false; - virJSONValuePtr lease_new =3D NULL; - virJSONValuePtr leases_array_new =3D NULL; + g_autoptr(virJSONValue) lease_new =3D NULL; + g_autoptr(virJSONValue) leases_array_new =3D NULL; =20 virSetErrorFunc(NULL, NULL); virSetErrorLogPriorityFunc(NULL); @@ -256,11 +256,5 @@ main(int argc, char **argv) if (pid_file_fd !=3D -1) virPidFileReleasePath(pid_file, pid_file_fd); =20 - VIR_FREE(pid_file); - VIR_FREE(server_duid); - VIR_FREE(custom_lease_file); - virJSONValueFree(lease_new); - virJSONValueFree(leases_array_new); - return rv; } diff --git a/src/util/virdnsmasq.h b/src/util/virdnsmasq.h index 4c14bc6ca7..e3814c2eb1 100644 --- a/src/util/virdnsmasq.h +++ b/src/util/virdnsmasq.h @@ -78,10 +78,14 @@ typedef enum { typedef struct _dnsmasqCaps dnsmasqCaps; typedef dnsmasqCaps *dnsmasqCapsPtr; =20 +G_DEFINE_AUTOPTR_CLEANUP_FUNC(dnsmasqCaps, virObjectUnref); + =20 dnsmasqContext * dnsmasqContextNew(const char *network_name, const char *config_dir); void dnsmasqContextFree(dnsmasqContext *ctx); +G_DEFINE_AUTOPTR_CLEANUP_FUNC(dnsmasqContext, dnsmasqContextFree); + int dnsmasqAddDhcpHost(dnsmasqContext *ctx, const char *mac, virSocketAddr *ip, --=20 2.25.4