From patchwork Thu Dec 9 23:53:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Khem Raj X-Patchwork-Id: 48741 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id DC0BE3858033 for ; Thu, 9 Dec 2021 23:54:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DC0BE3858033 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639094060; bh=I/vgn69KC0Pg0tTBuV3e57/ccP8wEr4/J3fKi61uTZU=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=rlgleHxqHXyKACQbny3/OAkzBxLjiQ+lkCkwNJbJQDb3Y6eTjExDDK/cpIGppWFaG BkJZRRtX82lFBIyesv8zJrZAuBJJx9t9TaH6onjiGnq7CF+BPFdBrB29x/rK4x/88t 6BJr8Nf9knY6noGWbNXlYZRC625KMXHsmbX0bQuY= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pg1-x536.google.com (mail-pg1-x536.google.com [IPv6:2607:f8b0:4864:20::536]) by sourceware.org (Postfix) with ESMTPS id EAA333858C27 for ; Thu, 9 Dec 2021 23:53:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org EAA333858C27 Received: by mail-pg1-x536.google.com with SMTP id l18so1835868pgj.9 for ; Thu, 09 Dec 2021 15:53:58 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=I/vgn69KC0Pg0tTBuV3e57/ccP8wEr4/J3fKi61uTZU=; b=TtZN+hlTv8jJBWYANayIWab/n43KeTOB3v0emzik0aJ5u/AU3VltdkeXfbOkiixIos YZ0OUh+gxmhKl4RwvFDeAHeBzUZIcVoSKgCMKijCUrFGa3YwfpTKc5fwLeKz/64UJPHs K3VezhUAmxRFBbXXY9IPqSwz6HOXXpT6j887f8BsAVpgyJPjUi/r6vn7dcNCD5WSQ7uk l8hiMTJbssgp8k6+BtnqhFRVHPrQN4+vHIXP7UxHhBHxUC4+DsvdhJvug6sWOakURMdb cS6FRq8AFlJcP36Y899vMOHnpERDhL3dw+5LQKuLZPP02AjPfDZ9TUJ7RCu7GCqe514G ++Bg== X-Gm-Message-State: AOAM533LPDrVqqZMCe3iIzLnQ8wmS4SrdPA1+yqq7XHGrkpsBXVgJFwI rva0+SIOVPbB7abcxxQimDWM6HQJioIYyw== X-Google-Smtp-Source: ABdhPJxzqPdcro9sKzuVvn+/M4IljfmyvbQSDmY4C+zHN4DpY/PUJqf6Qg9S1ku47AyK2AVVKXHfBA== X-Received: by 2002:a63:f918:: with SMTP id h24mr35989067pgi.283.1639094037879; Thu, 09 Dec 2021 15:53:57 -0800 (PST) Received: from apollo.hsd1.ca.comcast.net ([2601:646:9200:a0f0::ce68]) by smtp.gmail.com with ESMTPSA id d20sm772422pfl.88.2021.12.09.15.53.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Dec 2021 15:53:57 -0800 (PST) To: libc-alpha@sourceware.org Subject: [PATCH] elf/dl-deps.c: Make _dl_build_local_scope breadth first Date: Thu, 9 Dec 2021 15:53:54 -0800 Message-Id: <20211209235354.1558088-1-raj.khem@gmail.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Khem Raj via Libc-alpha From: Khem Raj Reply-To: Khem Raj Cc: Mark Hatle , Mark Hatle Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" From: Mark Hatle According to the ELF specification: When resolving symbolic references, the dynamic linker examines the symbol tables with a breadth-first search. This function was using a depth first search. By doing so the conflict resolution reported to the prelinker (when LD_TRACE_PRELINKING=1 is set) was incorrect. This caused problems when their were various circular dependencies between libraries. The problem usually manifested itself by the wrong IFUNC being executed. Similar issue has been reported here [1] [BZ# 20488] [1] https://sourceware.org/legacy-ml/libc-alpha/2016-05/msg00034.html Signed-off-by: Mark Hatle Signed-off-by: Khem Raj --- elf/dl-deps.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/elf/dl-deps.c b/elf/dl-deps.c index 237d9636c5..e15f7f83d8 100644 --- a/elf/dl-deps.c +++ b/elf/dl-deps.c @@ -73,13 +73,19 @@ _dl_build_local_scope (struct link_map **list, struct link_map *map) { struct link_map **p = list; struct link_map **q; + struct link_map **r; *p++ = map; map->l_reserved = 1; - if (map->l_initfini) - for (q = map->l_initfini + 1; *q; ++q) - if (! (*q)->l_reserved) - p += _dl_build_local_scope (p, *q); + + for (r = list; r < p; ++r) + if ((*r)->l_initfini) + for (q = (*r)->l_initfini + 1; *q; ++q) + if (! (*q)->l_reserved) + { + *p++ = *q; + (*q)->l_reserved = 1; + } return p - list; }