
On 09/26/2017 03:54 PM, ZhiPeng Lu wrote:
In learnIPAddressThread()the @inetaddr may be leaked.
Signed-off-by: ZhiPeng Lu <lu.zhipeng@zte.com.cn> --- src/nwfilter/nwfilter_learnipaddr.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/nwfilter/nwfilter_learnipaddr.c b/src/nwfilter/nwfilter_learnipaddr.c index cfd92d9..5dc212e 100644 --- a/src/nwfilter/nwfilter_learnipaddr.c +++ b/src/nwfilter/nwfilter_learnipaddr.c @@ -625,6 +625,7 @@ learnIPAddressThread(void *arg) if (virNWFilterIPAddrMapAddIPAddr(req->ifname, inetaddr) < 0) { VIR_ERROR(_("Failed to add IP address %s to IP address " "cache for interface %s"), inetaddr, req->ifname); + VIR_FREE(inetaddr); }
ret = virNWFilterInstantiateFilterLate(req->driver, @@ -636,7 +637,8 @@ learnIPAddressThread(void *arg) req->filtername, req->filterparams); VIR_DEBUG("Result from applying firewall rules on " - "%s with IP addr %s : %d", req->ifname, inetaddr, ret); + "%s with IP addr %s : %d", req->ifname, NULLSTR(inetaddr), ret);> +
Still not quite right... VIR_FREE() only happens if virNWFilterIPAddrMapAddIPAddr() < 0. Not sure what the purpose of a VIR_FREE in the upper condition and then NULLSTR() below would be... We're still calling virNWFilterInstantiateFilterLate regardless and still want the VIR_DEBUG printed. Perhaps just a VIR_FREE() after the VIR_DEBUG would seem to be sufficient since there's no escape clause. The VIR_ERROR may help us understand why/if ret != 0 though... I didn't put much thought into that though. John
} } else { if (showError)