This is the mail archive of the glibc-cvs@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]

GNU C Library master sources branch, master, updated. glibc-2.14-1-gc8fc0c9


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  c8fc0c91695b1c7003c7170861274161f9224817 (commit)
      from  356f8bc660a154a07b03da7c536831da5c8f74fe (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=c8fc0c91695b1c7003c7170861274161f9224817

commit c8fc0c91695b1c7003c7170861274161f9224817
Author: Ulrich Drepper <drepper@gmail.com>
Date:   Tue May 31 08:45:44 2011 -0400

    Don't free non-malloced memory and fix memory leak

diff --git a/ChangeLog b/ChangeLog
index 3a6abda..eee3d1b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-05-31  Andreas Schwab  <schwab@redhat.com>
+
+	* nscd/nscd_getserv_r.c (nscd_getserv_r): Don't free non-malloced
+	memory.  Use alloca_account.  Fix memory leak when retrying.
+
 2011-05-31  Ulrich Drepper  <drepper@gmail.com>
 
 	* version.h (RELEASE): Bump for 2.14 release.
diff --git a/nscd/nscd_getserv_r.c b/nscd/nscd_getserv_r.c
index de96a57..f9ef056 100644
--- a/nscd/nscd_getserv_r.c
+++ b/nscd/nscd_getserv_r.c
@@ -124,6 +124,7 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
 	  s_name = (char *) (&found->data[0].servdata + 1);
 	  serv_resp = found->data[0].servdata;
 	  s_proto = s_name + serv_resp.s_name_len;
+	  alloca_aliases_len = 1;
 	  aliases_len = (uint32_t *) (s_proto + serv_resp.s_proto_len);
 	  aliases_list = ((char *) aliases_len
 			  + serv_resp.s_aliases_cnt * sizeof (uint32_t));
@@ -154,7 +155,9 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
 				     + (serv_resp.s_aliases_cnt
 					* sizeof (uint32_t)));
 	      if (alloca_aliases_len)
-		tmp = __alloca (serv_resp.s_aliases_cnt * sizeof (uint32_t));
+		tmp = alloca_account (serv_resp.s_aliases_cnt
+				      * sizeof (uint32_t),
+				      alloca_used);
 	      else
 		{
 		  tmp = malloc (serv_resp.s_aliases_cnt * sizeof (uint32_t));
@@ -249,8 +252,9 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
 				     + (serv_resp.s_aliases_cnt
 					* sizeof (uint32_t)));
 	      if (alloca_aliases_len)
-		aliases_len = alloca (serv_resp.s_aliases_cnt
-				      * sizeof (uint32_t));
+		aliases_len = alloca_account (serv_resp.s_aliases_cnt
+					      * sizeof (uint32_t),
+					      alloca_used);
 	      else
 		{
 		  aliases_len = malloc (serv_resp.s_aliases_cnt
@@ -368,7 +372,11 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
 	}
 
       if (retval != -1)
-	goto retry;
+	{
+	  if (!alloca_aliases_len)
+	    free (aliases_len);
+	  goto retry;
+	}
     }
 
   if (!alloca_aliases_len)

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog             |    5 +++++
 nscd/nscd_getserv_r.c |   16 ++++++++++++----
 2 files changed, 17 insertions(+), 4 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


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