From patchwork Fri Apr 17 19:20:32 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roland McGrath X-Patchwork-Id: 462178 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3E5F71402E3 for ; Sat, 18 Apr 2015 05:20:42 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass reason="1024-bit key; unprotected key" header.d=sourceware.org header.i=@sourceware.org header.b=Cb9PiA5D; dkim-adsp=none (unprotected policy); dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:mime-version:content-type :content-transfer-encoding:from:to:cc:subject:in-reply-to :references:message-id:date; q=dns; s=default; b=Nv2GdlclT0iWXaV jTWf4221x1UmLUSLrWXbz18eiavCZf1rbRbyRwHxuiQzzni/sFE2IZWszeyegWCn Vd2+X/o8xX13rK2knyRY3dicLpoBC5MSKpSCh6pt2+z4nuX2ZtVKBrwtQC//faBV +S0mVEou5JDcg1tSHL/u7CDRtyj0= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:mime-version:content-type :content-transfer-encoding:from:to:cc:subject:in-reply-to :references:message-id:date; s=default; bh=3eVj+ZExp9x+R/AuFzfjL IAOSPE=; b=Cb9PiA5DalJ3yT//DxLXgipWRte8Dp6m+t1do5QdlOHUvi/tTK1Vt jFRg3bnf+hp4HUyDB6r0l01VweGePckqatBaUl0iV55Wtsddm2vtHSjOyWIL7Nle SfHXR6LRdlo52Z8vrcQzJ0p8n1pPmUGcRpf5NCFo4ypnuYM8BcO61w= Received: (qmail 54719 invoked by alias); 17 Apr 2015 19:20:37 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 54709 invoked by uid 89); 17 Apr 2015 19:20:36 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL, BAYES_00, KAM_LAZY_DOMAIN_SECURITY autolearn=no version=3.3.2 X-HELO: topped-with-meat.com MIME-Version: 1.0 From: Roland McGrath To: "Steve Ellcey " Cc: Subject: Re: Build problem with ToT GCC 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> References: <88baa580-c27b-4fc8-b7da-7de3c0a7f64d@BAMAIL02.ba.imgtec.org> Message-Id: <20150417192032.70DE42C3B91@topped-with-meat.com> Date: Fri, 17 Apr 2015 12:20:32 -0700 (PDT) X-CMAE-Score: 0 X-CMAE-Analysis: v=2.1 cv=SvUDtp+0 c=1 sm=1 tr=0 a=WkljmVdYkabdwxfqvArNOQ==:117 a=14OXPxybAAAA:8 a=kj9zAlcOel0A:10 a=hOe2yjtxAAAA:8 a=rxWXYwp4bqm4pF4tegQA:9 a=CjuIK1q_8ugA:10 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 * 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()"));