This function used the same char* three times for different purposes,
freeing it after each use. Since we don't want to ever manually free
an autofree'd pointer, modify it to use three separate char*, and make
them all g_autofree.
Signed-off-by: Laine Stump <laine(a)redhat.com>
---
This was suggested by Jan in
https://www.redhat.com/archives/libvir-list/2020-July/msg00805.html
pushing this patch along with the patch 5 referenced there will permit
pushing patch 06/15 of that series unmodified.
src/network/bridge_driver.c | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index dd8f34e543..6d341dba7c 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -2248,7 +2248,9 @@ static int
networkSetIPv6Sysctls(virNetworkObjPtr obj)
{
virNetworkDefPtr def = virNetworkObjGetDef(obj);
- char *field = NULL;
+ g_autofree char *disable_ipv6 = NULL;
+ g_autofree char *accept_ra = NULL;
+ g_autofree char *autoconf = NULL;
int ret = -1;
bool enableIPv6 = !!virNetworkDefGetIPByIndex(def, AF_INET6, 0);
@@ -2256,10 +2258,10 @@ networkSetIPv6Sysctls(virNetworkObjPtr obj)
* network. But also unset it if there *are* ipv6 addresses, as we
* can't be sure of its default value.
*/
- field = g_strdup_printf(SYSCTL_PATH "/net/ipv6/conf/%s/disable_ipv6",
- def->bridge);
+ disable_ipv6 = g_strdup_printf(SYSCTL_PATH
"/net/ipv6/conf/%s/disable_ipv6",
+ def->bridge);
- if (access(field, W_OK) < 0 && errno == ENOENT) {
+ if (access(disable_ipv6, W_OK) < 0 && errno == ENOENT) {
if (!enableIPv6)
VIR_DEBUG("ipv6 appears to already be disabled on %s",
def->bridge);
@@ -2267,13 +2269,12 @@ networkSetIPv6Sysctls(virNetworkObjPtr obj)
goto cleanup;
}
- if (virFileWriteStr(field, enableIPv6 ? "0" : "1", 0) < 0) {
+ if (virFileWriteStr(disable_ipv6, enableIPv6 ? "0" : "1", 0) <
0) {
virReportSystemError(errno,
_("cannot write to %s to enable/disable IPv6 "
- "on bridge %s"), field, def->bridge);
+ "on bridge %s"), disable_ipv6, def->bridge);
goto cleanup;
}
- VIR_FREE(field);
/* The rest of the ipv6 sysctl tunables should always be set the
* same, whether or not we're using ipv6 on this bridge.
@@ -2282,30 +2283,29 @@ networkSetIPv6Sysctls(virNetworkObjPtr obj)
/* Prevent guests from hijacking the host network by sending out
* their own router advertisements.
*/
- field = g_strdup_printf(SYSCTL_PATH "/net/ipv6/conf/%s/accept_ra",
- def->bridge);
+ accept_ra = g_strdup_printf(SYSCTL_PATH "/net/ipv6/conf/%s/accept_ra",
+ def->bridge);
- if (virFileWriteStr(field, "0", 0) < 0) {
+ if (virFileWriteStr(accept_ra, "0", 0) < 0) {
virReportSystemError(errno,
- _("cannot disable %s"), field);
+ _("cannot disable %s"), accept_ra);
goto cleanup;
}
- VIR_FREE(field);
/* All interfaces used as a gateway (which is what this is, by
* definition), must always have autoconf=0.
*/
- field = g_strdup_printf(SYSCTL_PATH "/net/ipv6/conf/%s/autoconf",
def->bridge);
+ autoconf = g_strdup_printf(SYSCTL_PATH "/net/ipv6/conf/%s/autoconf",
+ def->bridge);
- if (virFileWriteStr(field, "0", 0) < 0) {
+ if (virFileWriteStr(autoconf, "0", 0) < 0) {
virReportSystemError(errno,
- _("cannot disable %s"), field);
+ _("cannot disable %s"), autoconf);
goto cleanup;
}
ret = 0;
cleanup:
- VIR_FREE(field);
return ret;
}
--
2.25.4