Fix resource leak in resolver (bug 19257)

The number of currently defined nameservers is stored in ->nscount,
whereas ->_u._ext.nscount is set by __libc_res_nsend only after local
initializations.
This commit is contained in:
Andreas Schwab 2015-11-18 15:45:59 +01:00
parent 2beb1010e4
commit 5e7fdabd7d
2 changed files with 7 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2016-03-15 Andreas Schwab <schwab@suse.de>
[BZ #19257]
* resolv/res_init.c (__res_iclose): Use statp->nscount instead of
statp->_u._ext.nscount as loop count.
2016-03-14 Andreas Schwab <schwab@linux-m68k.org> 2016-03-14 Andreas Schwab <schwab@linux-m68k.org>
* math/test-signgam-finite-c99.c: Also #undef * math/test-signgam-finite-c99.c: Also #undef

View File

@ -580,7 +580,7 @@ __res_iclose(res_state statp, bool free_addr) {
statp->_vcsock = -1; statp->_vcsock = -1;
statp->_flags &= ~(RES_F_VC | RES_F_CONN); statp->_flags &= ~(RES_F_VC | RES_F_CONN);
} }
for (ns = 0; ns < statp->_u._ext.nscount; ns++) for (ns = 0; ns < statp->nscount; ns++)
if (statp->_u._ext.nsaddrs[ns]) { if (statp->_u._ext.nsaddrs[ns]) {
if (statp->_u._ext.nssocks[ns] != -1) { if (statp->_u._ext.nssocks[ns] != -1) {
close_not_cancel_no_status(statp->_u._ext.nssocks[ns]); close_not_cancel_no_status(statp->_u._ext.nssocks[ns]);