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.21-275-g2bd2cad
- From: roland at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 17 Apr 2015 22:00:36 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.21-275-g2bd2cad
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 2bd2cad9e8a410643e80efa0b15f6f2882e1271b (commit)
from 328c44c3670ebf6c1bd790acddce65a12998cd6c (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://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=2bd2cad9e8a410643e80efa0b15f6f2882e1271b
commit 2bd2cad9e8a410643e80efa0b15f6f2882e1271b
Author: Roland McGrath <roland@hack.frob.com>
Date: Fri Apr 17 14:29:40 2015 -0700
Avoid confusing compiler with dynamically impossible statically invalid dereference in _dl_close_worker.
diff --git a/ChangeLog b/ChangeLog
index 967a8c8..0b648bf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2015-04-17 Roland McGrath <roland@hack.frob.com>
+ * elf/dl-close.c (_dl_close_worker) [DL_NNS == 1]: Just assert that
+ IMAP->l_prev cannot be null, and #if out the code for the contrary
+ case, avoiding 'assert (nsid != LM_ID_BASE)' making the compiler
+ believe that NS (&_dl_ns[NSID]) could point outside the array.
+
* elf/dl-open.c (_dl_open): Use __glibc_unlikely in invalid namespace
check. Reject NSID < 0 and NSID >= dl_nns, and check for DL_NNS==1,
before using NSID as an index.
diff --git a/elf/dl-close.c b/elf/dl-close.c
index cf8f9e0..412f71d 100644
--- a/elf/dl-close.c
+++ b/elf/dl-close.c
@@ -641,9 +641,16 @@ _dl_close_worker (struct link_map *map)
DL_UNMAP (imap);
/* Finally, unlink the data structure and free it. */
- if (imap->l_prev != NULL)
- imap->l_prev->l_next = imap->l_next;
- else
+#if DL_NNS == 1
+ /* The assert in the (imap->l_prev == NULL) case gives
+ the compiler license to warn that NS points outside
+ the dl_ns array bounds in that case (as nsid != LM_ID_BASE
+ is tantamount to nsid >= DL_NNS). That should be impossible
+ in this configuration, so just assert about it instead. */
+ assert (nsid == LM_ID_BASE);
+ assert (imap->l_prev != NULL);
+#else
+ if (imap->l_prev == NULL)
{
assert (nsid != LM_ID_BASE);
ns->_ns_loaded = imap->l_next;
@@ -652,6 +659,9 @@ _dl_close_worker (struct link_map *map)
we leave for debuggers to examine. */
r->r_map = (void *) ns->_ns_loaded;
}
+ else
+#endif
+ imap->l_prev->l_next = imap->l_next;
--ns->_ns_nloaded;
if (imap->l_next != NULL)
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 5 +++++
elf/dl-close.c | 16 +++++++++++++---
2 files changed, 18 insertions(+), 3 deletions(-)
hooks/post-receive
--
GNU C Library master sources