From: Uman Shahzad Date: Thu, 17 Jan 2019 08:21:39 +0000 (+0000) Subject: BUG/MINOR: startup: certain goto paths in init_pollers fail to free X-Git-Tag: v2.0-dev1~183 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=da7eeedf386aba82e03ae71bbfac4d3543196844;p=thirdparty%2Fhaproxy.git BUG/MINOR: startup: certain goto paths in init_pollers fail to free If we fail to initialize pollers due to fdtab/fdinfo/polled_mask not getting allocated, we free any of those that were allocated and exit. However the ordering was incorrect, and there was an old unused and unreachable "fail_cache" path as well, which needs to be taken when no poller works. This was introduced with this commit during 1.9-dev : cb92f5c ("MINOR: pollers: move polled_mask outside of struct fdtab.") It needs to be backported to 1.9 only. --- diff --git a/src/fd.c b/src/fd.c index 84cb9080c2..9434c63003 100644 --- a/src/fd.c +++ b/src/fd.c @@ -528,6 +528,7 @@ int init_pollers() if ((polled_mask = calloc(global.maxsock, sizeof(unsigned long))) == NULL) goto fail_polledmask; + if ((fdinfo = calloc(global.maxsock, sizeof(struct fdinfo))) == NULL) goto fail_info; @@ -557,15 +558,13 @@ int init_pollers() return 1; } } while (!bp || bp->pref == 0); - return 0; - fail_cache: free(fdinfo); fail_info: - free(fdtab); - fail_tab: free(polled_mask); fail_polledmask: + free(fdtab); + fail_tab: return 0; }