* [PATCH] Avoid leaks in res_init
@ 2004-07-21 17:39 Jakub Jelinek
2004-07-21 18:07 ` [PATCH] tst-leaks2 Jakub Jelinek
2004-07-21 18:31 ` [PATCH] Avoid leaks in res_init Ulrich Drepper
0 siblings, 2 replies; 3+ messages in thread
From: Jakub Jelinek @ 2004-07-21 17:39 UTC (permalink / raw)
To: Ulrich Drepper; +Cc: Glibc hackers
Hi!
#include <malloc.h>
#include <resolv.h>
#include <netdb.h>
int main (void)
{
int i;
mtrace ();
for (i = 0; i < 50; ++i)
{
res_init ();
gethostbyname ("www.google.com");
}
}
leaks memory and if IPv6 is enabled also filehandles.
I have googled around but could not find a word about whether
res_init can or can't be called multiple times, but certainly
we need such an interface e.g. for nscd to reread resolv.conf
during nscd -i hosts.
2004-07-21 Jakub Jelinek <jakub@redhat.com>
* resolv/res_libc.c (res_init): If RES_INIT is set and
_res.nscount > 0, call __res_nclose and free nsaddrs.
--- libc/resolv/res_libc.c.jj 2003-07-23 09:56:18.000000000 +0200
+++ libc/resolv/res_libc.c 2004-07-21 19:25:05.419402346 +0200
@@ -54,6 +54,14 @@ res_init(void) {
_res.retry = 4;
if (!(_res.options & RES_INIT))
_res.options = RES_DEFAULT;
+ else if (_res.nscount > 0) {
+ __res_nclose (&_res); /* Close any VC sockets. */
+
+ for (int ns = 0; ns < MAXNS; ns++) {
+ free (_res._u._ext.nsaddrs[ns]);
+ _res._u._ext.nsaddrs[ns] = NULL;
+ }
+ }
/*
* This one used to initialize implicitly to zero, so unless the app
Jakub
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH] tst-leaks2
2004-07-21 17:39 [PATCH] Avoid leaks in res_init Jakub Jelinek
@ 2004-07-21 18:07 ` Jakub Jelinek
2004-07-21 18:31 ` [PATCH] Avoid leaks in res_init Ulrich Drepper
1 sibling, 0 replies; 3+ messages in thread
From: Jakub Jelinek @ 2004-07-21 18:07 UTC (permalink / raw)
To: Ulrich Drepper; +Cc: Glibc hackers
On Wed, Jul 21, 2004 at 05:23:24PM +0200, Jakub Jelinek wrote:
> leaks memory and if IPv6 is enabled also filehandles.
Here is a testcase for make xcheck:
2004-07-21 Jakub Jelinek <jakub@redhat.com>
* resolv/Makefile: Add rules to build and run tst-leaks2.
* resolv/tst-leaks2.c: New test.
--- libc/resolv/Makefile.jj 2004-01-12 10:52:38.000000000 +0100
+++ libc/resolv/Makefile 2004-07-21 20:00:47.727921163 +0200
@@ -33,8 +33,9 @@ routines := herror inet_addr inet_ntop i
res_hconf res_libc res-state
tests = tst-aton tst-leaks
+xtests = tst-leaks2
-generate := mtrace-tst-leaks tst-leaks.mtrace
+generate := mtrace-tst-leaks tst-leaks.mtrace tst-leaks2.mtrace
include ../Makeconfig
@@ -65,7 +66,8 @@ ifeq (yesyes,$(build-shared)$(have-threa
tests: $(objpfx)ga_test
endif
-generated := mtrace-tst-leaks tst-leaks.mtrace
+generated := mtrace-tst-leaks tst-leaks.mtrace \
+ mtrace-tst-leaks2 tst-leaks2.mtrace
include ../Rules
@@ -104,3 +106,12 @@ ifneq (no,$(PERL))
tests: $(objpfx)mtrace-tst-leaks
endif
endif
+
+tst-leaks2-ENV = MALLOC_TRACE=$(objpfx)tst-leaks2.mtrace
+$(objpfx)mtrace-tst-leaks2: $(objpfx)tst-leaks2.out
+ $(common-objpfx)malloc/mtrace $(objpfx)tst-leaks2.mtrace > $@
+ifeq (no,$(cross-compiling))
+ifneq (no,$(PERL))
+xtests: $(objpfx)mtrace-tst-leaks2
+endif
+endif
--- libc/resolv/tst-leaks2.c.jj 2004-07-21 19:55:46.287620269 +0200
+++ libc/resolv/tst-leaks2.c 2004-07-21 20:03:47.549480733 +0200
@@ -0,0 +1,42 @@
+/* Tests for res_init in libresolv
+ Copyright (C) 2004 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#undef gethostbyname
+
+#include <mcheck.h>
+#include <netdb.h>
+#include <resolv.h>
+
+/* Prototype for our test function. */
+extern int do_test (int argc, char *argv[]);
+
+/* This defines the `main' function and some more. */
+#include <test-skeleton.c>
+
+int
+do_test (int argc, char *argv[])
+{
+ mtrace ();
+ for (int i = 0; i < 20; ++i)
+ {
+ res_init ();
+ gethostbyname ("www.gnu.org");
+ }
+ return 0;
+}
Jakub
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Avoid leaks in res_init
2004-07-21 17:39 [PATCH] Avoid leaks in res_init Jakub Jelinek
2004-07-21 18:07 ` [PATCH] tst-leaks2 Jakub Jelinek
@ 2004-07-21 18:31 ` Ulrich Drepper
1 sibling, 0 replies; 3+ messages in thread
From: Ulrich Drepper @ 2004-07-21 18:31 UTC (permalink / raw)
To: Jakub Jelinek; +Cc: Glibc hackers
Applied, along with the test.
--
⧠Ulrich Drepper ⧠Red Hat, Inc. ⧠444 Castro St ⧠Mountain View, CA â
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2004-07-21 18:31 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-07-21 17:39 [PATCH] Avoid leaks in res_init Jakub Jelinek
2004-07-21 18:07 ` [PATCH] tst-leaks2 Jakub Jelinek
2004-07-21 18:31 ` [PATCH] Avoid leaks in res_init Ulrich Drepper
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).