This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, master, updated. glibc-2.14-1-gc8fc0c9
- From: drepper at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 31 May 2011 12:46:04 -0000
- Subject: 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