This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix memory leak in __res_vinit/__res_iclose


When resolv.conf contains IPv6 nameservers, __res_vinit stores their
address in malloced areas, pointed by statp->_u._ext.nsaddrs. They are
supposed to be freed later by __res_iclose, but it doesn't work as the
loop is done on statp->_u._ext.nscount instead of statp->nscount. This
causes a memory leak. This patch fixes it.

Changelog:
	[BZ #19527]
	* resolv/res_init.c (__res_iclose): Loop on statp->nscount instead of
	statp->_u._ext.nscount.
---
 ChangeLog         | 6 ++++++
 resolv/res_init.c | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index 4cc920d..2b390ac 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2016-03-14  Aurelien Jarno  <aurelien@aurel32.net>
+
+	[BZ #19527]
+	* resolv/res_init.c (__res_iclose): Loop on statp->nscount instead of
+	statp->_u._ext.nscount.
+
 2016-03-13  Samuel Thibault  <samuel.thibault@ens-lyon.org
 
 	* sysdeps/posix/waitid.c (OUR_WAITID): Test against WSTOPPED instead of
diff --git a/resolv/res_init.c b/resolv/res_init.c
index 128004a..02590fb 100644
--- a/resolv/res_init.c
+++ b/resolv/res_init.c
@@ -580,7 +580,7 @@ __res_iclose(res_state statp, bool free_addr) {
 		statp->_vcsock = -1;
 		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.nssocks[ns] != -1) {
 				close_not_cancel_no_status(statp->_u._ext.nssocks[ns]);
-- 
2.7.0


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]