This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] Fix memory leak in __res_vinit/__res_iclose
- From: Aurelien Jarno <aurelien at aurel32 dot net>
- To: libc-alpha at sourceware dot org
- Cc: Aurelien Jarno <aurelien at aurel32 dot net>
- Date: Mon, 14 Mar 2016 20:01:29 +0100
- Subject: [PATCH] Fix memory leak in __res_vinit/__res_iclose
- Authentication-results: sourceware.org; auth=none
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