From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-vk1-xa2f.google.com (mail-vk1-xa2f.google.com [IPv6:2607:f8b0:4864:20::a2f]) by sourceware.org (Postfix) with ESMTPS id 83810393600A for ; Tue, 11 Jan 2022 19:26:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 83810393600A Received: by mail-vk1-xa2f.google.com with SMTP id n124so174383vke.6 for ; Tue, 11 Jan 2022 11:26:29 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to :content-transfer-encoding; bh=KB1uU19qeOpNI5UNgFu4anZNSCmbb5ukCJr/d36TGSE=; b=Kl91Jstt8k/cWRp6N0hAFdiyas53UGdYipxBoh0phbFEgI8Vp9BpRNeYxXGt/6zIVX MOhn52FkmGAQpTP4JU3CD4gWw69iDvYqPFMuzDvQ0ulop61pLprd3wdaKzIvaDJJHlZK w52SfmRaXGUV16tmshEajr2kvOc+CG8QtkBfl/v0sLTOkZFid3EkQ8lifzRmXEWD4bDQ ebqVkOwvSDtitBf9Lhp1L0X2MGoVob5+pCWG+51WvQnzI2W9wbjcG1tnjBJ+3ZvkFQW/ Jva5EaEANaCBpbklEOMS6ADnvXjaeEBxCK8J3DyOzssNUsFIysNMd/EpXYVMIdY8mkfV iv/w== X-Gm-Message-State: AOAM532q/E9hBXI+zRG6rlzOWO5IR2l3rM5CYiKniMiXXVldTmdfGXha XpeiCKh0o0eUN6DukEieYp6qkQ== X-Google-Smtp-Source: ABdhPJy7Nr24wJEB4NzU/9BczrO7EHvjanLx9oU8WzGcHoi+pD8pMWv4ULHOWsaBb6+uWQDBAsQsxA== X-Received: by 2002:a05:6122:179c:: with SMTP id o28mr2972490vkf.9.1641929181367; Tue, 11 Jan 2022 11:26:21 -0800 (PST) Received: from ?IPV6:2804:431:c7ca:9d3:6f7c:f45d:859d:a30d? ([2804:431:c7ca:9d3:6f7c:f45d:859d:a30d]) by smtp.gmail.com with ESMTPSA id u124sm6033649vkg.3.2022.01.11.11.26.20 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 11 Jan 2022 11:26:21 -0800 (PST) Message-ID: <018ad7e3-c020-3507-94be-ccb21c90899f@linaro.org> Date: Tue, 11 Jan 2022 16:26:18 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.4.0 Subject: Re: [PATCH] elf/dl-deps.c: Make _dl_build_local_scope breadth first Content-Language: en-US To: Khem Raj , libc-alpha@sourceware.org Cc: Mark Hatle , Mark Hatle References: <20211209235354.1558088-1-raj.khem@gmail.com> From: Adhemerval Zanella In-Reply-To: <20211209235354.1558088-1-raj.khem@gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, 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-List-Received-Date: Tue, 11 Jan 2022 19:26:31 -0000 On 09/12/2021 20:53, Khem Raj via Libc-alpha wrote: > 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 I am trying to understand why it this only an issue for LD_TRACE_PRELINKING=1, do we have a testcase that stress it for a default usercase? When you say the 'wrong IFUNC being executed' what exactly you mean here? Could we use a testcase based on this? > --- > 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; > } >