GNU C Library master sources branch, master, updated. glibc-2.12-251-g0876917

drepper@sourceware.org drepper@sourceware.org
Thu Jan 13 04:11:00 GMT 2011


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  0876917582041d17a9eb6b08894c1123a2affe74 (commit)
      from  5e49c52efdb37eb0aa315156f39056f25ff9ddaa (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=0876917582041d17a9eb6b08894c1123a2affe74

commit 0876917582041d17a9eb6b08894c1123a2affe74
Author: Ulrich Drepper <drepper@gmail.com>
Date:   Wed Jan 12 23:10:00 2011 -0500

    Fix assertion when handling DSTs during auditing.

diff --git a/ChangeLog b/ChangeLog
index b969183..ee70519 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-01-12  Ulrich Drepper  <drepper@gmail.com>
+
+	* elf/dl-dst.h (DL_DST_REQUIRED): Allow l_origin to be NULL when
+	loader is ld.so.
+
 2011-01-10  Paul Pluzhnikov  <ppluzhnikov@google.com>
 
 	* sysdeps/i386/Makefile: stdlib/cxa_finalize.c needs 16-byte stack
diff --git a/elf/dl-dst.h b/elf/dl-dst.h
index ae8d119..9d219e2 100644
--- a/elf/dl-dst.h
+++ b/elf/dl-dst.h
@@ -1,6 +1,5 @@
 /* Handling of dynamic sring tokens.
-   Copyright (C) 1999,2001,2002,2003,2004,2006,2007
-   Free Software Foundation, Inc.
+   Copyright (C) 1999,2001-2004,2006,2007,2011 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
@@ -33,6 +32,11 @@
     __cnt; })
 
 
+#ifdef SHARED
+# define IS_RTLD(l) (l) == &GL(dl_rtld_map)
+#else
+# define IS_RTLD(l) 0
+#endif
 /* Guess from the number of DSTs the length of the result string.  */
 #define DL_DST_REQUIRED(l, name, len, cnt) \
   ({									      \
@@ -41,7 +45,7 @@
 									      \
     if (__cnt > 0)							      \
       {									      \
-	size_t dst_len;						      	      \
+	size_t dst_len;							      \
 	/* Now we make a guess how many extra characters on top of the	      \
 	   length of S we need to represent the result.  We know that	      \
 	   we have CNT replacements.  Each at most can use		      \
@@ -50,11 +54,12 @@
 	   minus 4 (which is the length of "$LIB").			      \
 									      \
 	   First get the origin string if it is not available yet.	      \
-	   This can only happen for the map of the executable.  */	      \
+	   This can only happen for the map of the executable or, when	      \
+	   auditing, in ld.so.  */					      \
 	DL_DST_REQ_STATIC (l)						      \
 	if ((l)->l_origin == NULL)					      \
 	  {								      \
-	    assert ((l)->l_name[0] == '\0');				      \
+	    assert ((l)->l_name[0] == '\0' || IS_RTLD (l));		      \
 	    (l)->l_origin = _dl_get_origin ();				      \
 	    dst_len = ((l)->l_origin && (l)->l_origin != (char *) -1	      \
 			  ? strlen ((l)->l_origin) : 0);		      \
@@ -62,7 +67,7 @@
 	else								      \
 	  dst_len = (l)->l_origin == (char *) -1			      \
 	    ? 0 : strlen ((l)->l_origin);				      \
-	dst_len = MAX (MAX (dst_len, GLRO(dl_platformlen)), 		      \
+	dst_len = MAX (MAX (dst_len, GLRO(dl_platformlen)),		      \
 		       strlen (DL_DST_LIB));				      \
 	if (dst_len > 4)						      \
 	  __len += __cnt * (dst_len - 4);				      \

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

Summary of changes:
 ChangeLog    |    5 +++++
 elf/dl-dst.h |   17 +++++++++++------
 2 files changed, 16 insertions(+), 6 deletions(-)


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



More information about the Glibc-cvs mailing list