mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
network: Remove memory leak caused by wrong initialization
This commit fix a wrong variable initialization. There is a variable called `new_lease` which is being initialized with the content of parameter `lease`. To avoid memory leak, the proper way is initialize with NULL first. This wrong statement was added by commit 97a0aa24. There are some other improvements also. Signed-off-by: Julio Faracco <jcfaracco@gmail.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
4e7f8ba0f3
commit
4aa1ab0e79
@ -412,38 +412,32 @@ static int
|
|||||||
virNetworkDHCPLeaseTimeDefParseXML(virNetworkDHCPLeaseTimeDefPtr *lease,
|
virNetworkDHCPLeaseTimeDefParseXML(virNetworkDHCPLeaseTimeDefPtr *lease,
|
||||||
xmlNodePtr node)
|
xmlNodePtr node)
|
||||||
{
|
{
|
||||||
virNetworkDHCPLeaseTimeDefPtr new_lease = *lease;
|
virNetworkDHCPLeaseTimeDefPtr new_lease = NULL;
|
||||||
g_autofree char *expiry = NULL;
|
g_autofree char *expirystr = NULL;
|
||||||
g_autofree char *unit = NULL;
|
g_autofree char *unitstr = NULL;
|
||||||
int unitInt;
|
unsigned long expiry;
|
||||||
|
int unit = VIR_NETWORK_DHCP_LEASETIME_UNIT_MINUTES;
|
||||||
|
|
||||||
if (!(expiry = virXMLPropString(node, "expiry")))
|
if (!(expirystr = virXMLPropString(node, "expiry")))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (VIR_ALLOC(new_lease) < 0)
|
if (virStrToLong_ul(expirystr, NULL, 10, &expiry) < 0)
|
||||||
return -1;
|
|
||||||
new_lease->unit = VIR_NETWORK_DHCP_LEASETIME_UNIT_MINUTES;
|
|
||||||
|
|
||||||
if (virStrToLong_ul(expiry, NULL, 10, &new_lease->expiry) < 0)
|
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if ((unit = virXMLPropString(node, "unit"))) {
|
if ((unitstr = virXMLPropString(node, "unit"))) {
|
||||||
if ((unitInt = virNetworkDHCPLeaseTimeUnitTypeFromString(unit)) < 0) {
|
if ((unit = virNetworkDHCPLeaseTimeUnitTypeFromString(unitstr)) < 0) {
|
||||||
virReportError(VIR_ERR_XML_ERROR,
|
virReportError(VIR_ERR_XML_ERROR,
|
||||||
_("Invalid unit: %s"), unit);
|
_("Invalid unit: %s"), unitstr);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
new_lease->unit = unitInt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* infinite */
|
/* infinite */
|
||||||
if (new_lease->expiry > 0) {
|
if (expiry > 0) {
|
||||||
/* This boundary check is related to dnsmasq man page settings:
|
/* This boundary check is related to dnsmasq man page settings:
|
||||||
* "The minimum lease time is two minutes." */
|
* "The minimum lease time is two minutes." */
|
||||||
if ((new_lease->unit == VIR_NETWORK_DHCP_LEASETIME_UNIT_SECONDS &&
|
if ((unit == VIR_NETWORK_DHCP_LEASETIME_UNIT_SECONDS && expiry < 120) ||
|
||||||
new_lease->expiry < 120) ||
|
(unit == VIR_NETWORK_DHCP_LEASETIME_UNIT_MINUTES && expiry < 2)) {
|
||||||
(new_lease->unit == VIR_NETWORK_DHCP_LEASETIME_UNIT_MINUTES &&
|
|
||||||
new_lease->expiry < 2)) {
|
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
_("The minimum lease time should be greater "
|
_("The minimum lease time should be greater "
|
||||||
"than 2 minutes"));
|
"than 2 minutes"));
|
||||||
@ -451,6 +445,12 @@ virNetworkDHCPLeaseTimeDefParseXML(virNetworkDHCPLeaseTimeDefPtr *lease,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (VIR_ALLOC(new_lease) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
new_lease->expiry = expiry;
|
||||||
|
new_lease->unit = unit;
|
||||||
|
|
||||||
*lease = new_lease;
|
*lease = new_lease;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -969,7 +969,6 @@ static int networkConnectIsAlive(virConnectPtr conn G_GNUC_UNUSED)
|
|||||||
static char *
|
static char *
|
||||||
networkBuildDnsmasqLeaseTime(virNetworkDHCPLeaseTimeDefPtr lease)
|
networkBuildDnsmasqLeaseTime(virNetworkDHCPLeaseTimeDefPtr lease)
|
||||||
{
|
{
|
||||||
char *leasetime = NULL;
|
|
||||||
const char *unit;
|
const char *unit;
|
||||||
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
|
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
|
||||||
|
|
||||||
@ -984,9 +983,7 @@ networkBuildDnsmasqLeaseTime(virNetworkDHCPLeaseTimeDefPtr lease)
|
|||||||
virBufferAsprintf(&buf, "%lu%c", lease->expiry, unit[0]);
|
virBufferAsprintf(&buf, "%lu%c", lease->expiry, unit[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
leasetime = virBufferContentAndReset(&buf);
|
return virBufferContentAndReset(&buf);
|
||||||
|
|
||||||
return leasetime;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -999,14 +996,13 @@ networkBuildDnsmasqDhcpHostsList(dnsmasqContext *dctx,
|
|||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
bool ipv6 = false;
|
bool ipv6 = false;
|
||||||
g_autofree char *leasetime = NULL;
|
|
||||||
|
|
||||||
if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET6))
|
if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET6))
|
||||||
ipv6 = true;
|
ipv6 = true;
|
||||||
for (i = 0; i < ipdef->nhosts; i++) {
|
for (i = 0; i < ipdef->nhosts; i++) {
|
||||||
virNetworkDHCPHostDefPtr host = &(ipdef->hosts[i]);
|
virNetworkDHCPHostDefPtr host = &(ipdef->hosts[i]);
|
||||||
|
g_autofree char *leasetime = networkBuildDnsmasqLeaseTime(host->lease);
|
||||||
|
|
||||||
leasetime = networkBuildDnsmasqLeaseTime(host->lease);
|
|
||||||
if (VIR_SOCKET_ADDR_VALID(&host->ip))
|
if (VIR_SOCKET_ADDR_VALID(&host->ip))
|
||||||
if (dnsmasqAddDhcpHost(dctx, host->mac, &host->ip,
|
if (dnsmasqAddDhcpHost(dctx, host->mac, &host->ip,
|
||||||
host->name, host->id, leasetime,
|
host->name, host->id, leasetime,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user