mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-02 01:45:17 +00:00
network: Avoid memory leaks on networkBuildDnsmasqArgv
Detected by valgrind. Leaks introduced in commit 973af236. * src/network/bridge_driver.c: fix memory leaks on failure and successful path. * How to reproduce? % make -C tests check TESTS=networkxml2argvtest % cd tests && valgrind -v --leak-check=full ./networkxml2argvtest * Actual result: ==2226== 3 bytes in 1 blocks are definitely lost in loss record 1 of 24 ==2226== at 0x4A05FDE: malloc (vg_replace_malloc.c:236) ==2226== by 0x39CF0FEDE7: __vasprintf_chk (in /lib64/libc-2.12.so) ==2226== by 0x41DFF7: virVasprintf (stdio2.h:199) ==2226== by 0x41E0B7: virAsprintf (util.c:1695) ==2226== by 0x41A2D9: networkBuildDhcpDaemonCommandLine (bridge_driver.c:545) ==2226== by 0x4145C8: testCompareXMLToArgvHelper (networkxml2argvtest.c:47) ==2226== by 0x4156A1: virtTestRun (testutils.c:141) ==2226== by 0x414332: mymain (networkxml2argvtest.c:123) ==2226== by 0x414D97: virtTestMain (testutils.c:696) ==2226== by 0x39CF01ECDC: (below main) (in /lib64/libc-2.12.so) ==2226== ==2226== 3 bytes in 1 blocks are definitely lost in loss record 2 of 24 ==2226== at 0x4A05FDE: malloc (vg_replace_malloc.c:236) ==2226== by 0x39CF0FEDE7: __vasprintf_chk (in /lib64/libc-2.12.so) ==2226== by 0x41DFF7: virVasprintf (stdio2.h:199) ==2226== by 0x41E0B7: virAsprintf (util.c:1695) ==2226== by 0x41A307: networkBuildDhcpDaemonCommandLine (bridge_driver.c:551) ==2226== by 0x4145C8: testCompareXMLToArgvHelper (networkxml2argvtest.c:47) ==2226== by 0x4156A1: virtTestRun (testutils.c:141) ==2226== by 0x414332: mymain (networkxml2argvtest.c:123) ==2226== by 0x414D97: virtTestMain (testutils.c:696) ==2226== by 0x39CF01ECDC: (below main) (in /lib64/libc-2.12.so) ==2226== ==2226== 5 bytes in 1 blocks are definitely lost in loss record 4 of 24 ==2226== at 0x4A05FDE: malloc (vg_replace_malloc.c:236) ==2226== by 0x39CF0FEDE7: __vasprintf_chk (in /lib64/libc-2.12.so) ==2226== by 0x41DFF7: virVasprintf (stdio2.h:199) ==2226== by 0x41E0B7: virAsprintf (util.c:1695) ==2226== by 0x41A2AB: networkBuildDhcpDaemonCommandLine (bridge_driver.c:539) ==2226== by 0x4145C8: testCompareXMLToArgvHelper (networkxml2argvtest.c:47) ==2226== by 0x4156A1: virtTestRun (testutils.c:141) ==2226== by 0x414332: mymain (networkxml2argvtest.c:123) ==2226== by 0x414D97: virtTestMain (testutils.c:696) ==2226== by 0x39CF01ECDC: (below main) (in /lib64/libc-2.12.so) ==2226== ==2226== LEAK SUMMARY: ==2226== definitely lost: 11 bytes in 3 blocks Signed-off-by: Alex Jia <ajia@redhat.com> Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
9f902a2ed5
commit
be9fb5affc
@ -459,6 +459,10 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
|
|||||||
int r, ret = -1;
|
int r, ret = -1;
|
||||||
int nbleases = 0;
|
int nbleases = 0;
|
||||||
int ii;
|
int ii;
|
||||||
|
char *record = NULL;
|
||||||
|
char *recordPort = NULL;
|
||||||
|
char *recordWeight = NULL;
|
||||||
|
char *recordPriority = NULL;
|
||||||
virNetworkIpDefPtr tmpipdef;
|
virNetworkIpDefPtr tmpipdef;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -516,24 +520,13 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < dns->ntxtrecords; i++) {
|
for (i = 0; i < dns->ntxtrecords; i++) {
|
||||||
char *record = NULL;
|
virCommandAddArg(cmd, "--txt-record");
|
||||||
if (virAsprintf(&record, "%s,%s",
|
virCommandAddArgFormat(cmd, "%s,%s",
|
||||||
dns->txtrecords[i].name,
|
dns->txtrecords[i].name,
|
||||||
dns->txtrecords[i].value) < 0) {
|
dns->txtrecords[i].value);
|
||||||
virReportOOMError();
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
virCommandAddArgPair(cmd, "--txt-record", record);
|
|
||||||
VIR_FREE(record);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < dns->nsrvrecords; i++) {
|
for (i = 0; i < dns->nsrvrecords; i++) {
|
||||||
char *record = NULL;
|
|
||||||
char *recordPort = NULL;
|
|
||||||
char *recordPriority = NULL;
|
|
||||||
char *recordWeight = NULL;
|
|
||||||
|
|
||||||
if (dns->srvrecords[i].service && dns->srvrecords[i].protocol) {
|
if (dns->srvrecords[i].service && dns->srvrecords[i].protocol) {
|
||||||
if (dns->srvrecords[i].port) {
|
if (dns->srvrecords[i].port) {
|
||||||
if (virAsprintf(&recordPort, "%d", dns->srvrecords[i].port) < 0) {
|
if (virAsprintf(&recordPort, "%d", dns->srvrecords[i].port) < 0) {
|
||||||
@ -568,6 +561,9 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
|
|||||||
|
|
||||||
virCommandAddArgPair(cmd, "--srv-host", record);
|
virCommandAddArgPair(cmd, "--srv-host", record);
|
||||||
VIR_FREE(record);
|
VIR_FREE(record);
|
||||||
|
VIR_FREE(recordPort);
|
||||||
|
VIR_FREE(recordWeight);
|
||||||
|
VIR_FREE(recordPriority);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -671,6 +667,10 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
|
|||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
cleanup:
|
cleanup:
|
||||||
|
VIR_FREE(record);
|
||||||
|
VIR_FREE(recordPort);
|
||||||
|
VIR_FREE(recordWeight);
|
||||||
|
VIR_FREE(recordPriority);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user