public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Roland McGrath <roland@hack.frob.com>
To: "Steve Ellcey " <sellcey@imgtec.com>
Cc: <libc-alpha@sourceware.org>
Subject: Re: Build problem with ToT GCC
Date: Fri, 17 Apr 2015 19:20:00 -0000	[thread overview]
Message-ID: <20150417192032.70DE42C3B91@topped-with-meat.com> (raw)
In-Reply-To: Steve Ellcey 's message of  Friday, 17 April 2015 11:07:56 -0700 <88baa580-c27b-4fc8-b7da-7de3c0a7f64d@BAMAIL02.ba.imgtec.org>

Can you try this change (on branch roland/dl-nns) with that compiler?
I suspect a compile-time constant preventing evaluation of the
expressions doing indexing will avoid the warning.  If it doesn't,
then the right thing to do is to put that inside #if DL_NNS > 1.

While I was there I noticed that it's not properly checking for wildly
bogus NSID values that would make that indexing bogus at runtime (in
the SHARED case), so I put that in too.


Thanks,
Roland


2015-04-17  Roland McGrath  <roland@hack.frob.com>

	* 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-open.c b/elf/dl-open.c
index 0dbe07f..2d0e082 100644
--- a/elf/dl-open.c
+++ b/elf/dl-open.c
@@ -619,8 +619,14 @@ no more namespaces available for dlmopen()"));
   /* Never allow loading a DSO in a namespace which is empty.  Such
      direct placements is only causing problems.  Also don't allow
      loading into a namespace used for auditing.  */
-  else if (__builtin_expect (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER, 0)
-	   && (GL(dl_ns)[nsid]._ns_nloaded == 0
+  else if (__glibc_unlikely (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER)
+	   && (__glibc_unlikely (nsid < 0 || nsid >= GL(dl_nns))
+	       /* This prevents the [NSID] index expressions from being
+		  evaluated, so the compiler won't think that we are
+		  accessing an invalid index here in the !SHARED case where
+		  DL_NNS is 1 and so any NSID != 0 is invalid.  */
+	       || DL_NNS == 1
+	       || GL(dl_ns)[nsid]._ns_nloaded == 0
 	       || GL(dl_ns)[nsid]._ns_loaded->l_auditing))
     _dl_signal_error (EINVAL, file, NULL,
 		      N_("invalid target namespace in dlmopen()"));

  reply	other threads:[~2015-04-17 19:20 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-17 18:08 Steve Ellcey 
2015-04-17 19:20 ` Roland McGrath [this message]
2015-04-17 19:51   ` Steve Ellcey
2015-04-17 19:58     ` Roland McGrath
2015-04-17 20:02       ` Steve Ellcey
2015-04-17 20:46         ` Steve Ellcey
2015-04-17 21:03           ` [COMMITTED PATCH] Fuller check for invalid NSID in _dl_open Roland McGrath
2015-04-17 21:31           ` Build problem with ToT GCC Roland McGrath
2015-04-17 21:52             ` Steve Ellcey
2015-04-17 22:01               ` Roland McGrath

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150417192032.70DE42C3B91@topped-with-meat.com \
    --to=roland@hack.frob.com \
    --cc=libc-alpha@sourceware.org \
    --cc=sellcey@imgtec.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).