From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oa1-x2d.google.com (mail-oa1-x2d.google.com [IPv6:2001:4860:4864:20::2d]) by sourceware.org (Postfix) with ESMTPS id 105973858D35 for ; Wed, 15 Feb 2023 13:19:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 105973858D35 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org Received: by mail-oa1-x2d.google.com with SMTP id 586e51a60fabf-169ba826189so22876625fac.2 for ; Wed, 15 Feb 2023 05:19:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:in-reply-to:organization:from:references :to:content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=Qoie3fy38n3l06lYKMmKBfm/CB2fwKbBJ/NWrdHxTFY=; b=c+u3luExi+F8HPvERKoFC/Dqw/1Ec5RfunYcmqvMwphN92tt7r3WMuq8X9/6Zbr0Jj 92NdvycCVA3vgJs5yvQGUYXotOqRMHDyR0R5GQTPE3Ca1l4oamppvt6gUYcJFSef03aC HJNrOCJEYEAOvrX9PXD1IYwsui/2iNSD0DmNvCg8PFFkGwYXa5aYciMHslN3853vyOdP wiz2NNf45C5S269RFUlQy9W9ei3+Zao06Wu4CUs/uIqLPzXw+HEQsi/KBMsioKG1hB0B Oz13qFNULrY8WHeFYzHIP6G409XH2d4WPdCbNa/s1DwnZX+i31DlN3W7C/JihtVS/cIc cwsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:organization:from:references :to:content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Qoie3fy38n3l06lYKMmKBfm/CB2fwKbBJ/NWrdHxTFY=; b=4d8ykWnUTVF9GXnV1Vnvyj7d8qgphxi2/RRsoIc8H3/71gKYzE1wZx/1vrbPjMi4rT nXiuWoDruOSfFaQoAzvS3tv3zRHrifqnOVNwLE2ubIApA/ln0KJ+R0O8v2GLhDIHuP4A bQABqxl89481nwor5H6Q2nQQ+nFClT8ufO8cgeP85emqEx6K+5wiUcnQFnMfGMXXIEZN 7OYGSFUEooJ9ma42R/+h/RBgTgefPefVtNAdBBhYarc9RTtQzhv9InFvApl+k27XRWb+ EbiM5J3uFAkE4QNhXTSbk1q9A7Yy1qovxzhD1a5ndCOfuqIbqpOVL3v2d1o3spIFNou2 4vlQ== X-Gm-Message-State: AO0yUKW9SBrjx5BhC0d0OSR0xRCRNk9rQJgvSXafkbKbzM3bmtZDlj3Z U7MsEBlFncekpOm6qVGkMQzaawdITYkjLSzLwZU= X-Google-Smtp-Source: AK7set+JYV0rhK2LA/ylNE6IGhpRxdj3vjMEhmQgb5QW9z8jcqg1LylZa6gT/RWgDJQLhT/ciSBlsg== X-Received: by 2002:a05:6870:354:b0:16d:f31e:f493 with SMTP id n20-20020a056870035400b0016df31ef493mr1082868oaf.13.1676467158521; Wed, 15 Feb 2023 05:19:18 -0800 (PST) Received: from ?IPV6:2804:1b3:a7c3:3a5:44ad:5aad:f16a:f333? ([2804:1b3:a7c3:3a5:44ad:5aad:f16a:f333]) by smtp.gmail.com with ESMTPSA id n2-20020a056870844200b0010c727a3c79sm6207528oak.26.2023.02.15.05.19.16 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 15 Feb 2023 05:19:17 -0800 (PST) Message-ID: <29e67aba-b51a-be4c-0408-de87d0aae4ad@linaro.org> Date: Wed, 15 Feb 2023 10:19:15 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.7.2 Subject: Re: [PATCH] elf: Restore lconfig libc6 implicit soname logic [BZ #30125] Content-Language: en-US To: Joan Bruguera , libc-alpha@sourceware.org References: <20230215014124.4144451-1-joanbrugueram@gmail.com> From: Adhemerval Zanella Netto Organization: Linaro In-Reply-To: <20230215014124.4144451-1-joanbrugueram@gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 14/02/23 22:41, Joan Bruguera wrote: > While cleaning up old libc version support, the deprecated libc4 code was > accidentally kept in `implicit_soname`, instead of the libc6 code. > > This causes additional symlinks to be created by `ldconfig` for libraries > without a soname, e.g. a library `libsomething.123.456.789` without a soname > will create a `libsomething.123` -> `libsomething.123.456.789` symlink. > > As the libc6 version of the `implicit_soname` code is just a trivial xstrdup, > just inline it and remove `implicit_soname` altogether. > > Some further simplification looks possible (e.g. the call to `create_links` > looks like a no-op if `soname == NULL`, other than the verbose printfs), but > logic is kept as-is for now. > > Fixes: BZ #30125 > Fixes: 8ee878592c4a ("Assume only FLAG_ELF_LIBC6 suport") Patch looks ok in general, some comments on the test. You used an old revision and then patch does not apply cleanly[1], could you rebase the patch and send a v2? [1] https://patchwork.sourceware.org/project/glibc/patch/20230215014124.4144451-1-joanbrugueram@gmail.com/ > Signed-off-by: Joan Bruguera We do not signed-off-by on glibc, so no need for it. > --- > elf/Makefile | 7 ++++++ > elf/ldconfig.c | 4 +-- > elf/readlib.c | 19 --------------- > elf/tst-ldconfig-no-soname.sh | 46 +++++++++++++++++++++++++++++++++++ > sysdeps/generic/ldconfig.h | 2 -- > 5 files changed, 55 insertions(+), 23 deletions(-) > create mode 100644 elf/tst-ldconfig-no-soname.sh > > diff --git a/elf/Makefile b/elf/Makefile > index b509b3eada..d5f541fd84 100644 > --- a/elf/Makefile > +++ b/elf/Makefile > @@ -626,6 +626,7 @@ ifeq ($(run-built-tests),yes) > tests-special += \ > $(objpfx)noload-mem.out \ > $(objpfx)tst-ldconfig-X.out \ > + $(objpfx)tst-ldconfig-no-soname.out \ > $(objpfx)tst-leaks1-mem.out \ > $(objpfx)tst-rtld-help.out \ > # tests-special > @@ -2396,6 +2397,12 @@ $(objpfx)tst-ldconfig-X.out : tst-ldconfig-X.sh $(objpfx)ldconfig > '$(run-program-env)' > $@; \ > $(evaluate-test) > > +$(objpfx)tst-ldconfig-no-soname.out : tst-ldconfig-no-soname.sh \ > + $(objpfx)ldconfig > + $(SHELL) $< '$(common-objpfx)' '$(test-wrapper-env)' \ > + '$(run-program-env)' > $@; \ > + $(evaluate-test) > + > # Test static linking of all the libraries we can possibly link > # together. Note that in some configurations this may be less than the > # complete list of libraries we build but we try to maxmimize this list. > diff --git a/elf/ldconfig.c b/elf/ldconfig.c > index 3f1b30c570..2fc45ad825 100644 > --- a/elf/ldconfig.c > +++ b/elf/ldconfig.c > @@ -616,7 +616,7 @@ manual_link (char *library) > goto out; > } > if (soname == NULL) > - soname = implicit_soname (libname, flag); > + soname = xstrdup (libname); > create_links (real_path, path, libname, soname); > free (soname); > out: > @@ -849,7 +849,7 @@ search_dir (const struct dir_entry *entry) > } > > if (soname == NULL) > - soname = implicit_soname (direntry->d_name, flag); > + soname = xstrdup (direntry->d_name); > > /* A link may just point to itself. */ > if (is_link) > diff --git a/elf/readlib.c b/elf/readlib.c > index c5c3591eef..bc13d9acc6 100644 > --- a/elf/readlib.c > +++ b/elf/readlib.c > @@ -166,24 +166,5 @@ process_file (const char *real_file_name, const char *file_name, > return ret; > } > > -/* Returns made up soname if lib doesn't have explicit DT_SONAME. */ > - > -char * > -implicit_soname (const char *lib, int flag) > -{ > - char *soname = xstrdup (lib); > - > - /* Aout files don't have a soname, just return the name > - including the major number. */ > - char *major = strstr (soname, ".so."); > - if (major) > - { > - char *dot = strstr (major + 4, "."); > - if (dot) > - *dot = '\0'; > - } > - return soname; > -} > - > /* Get architecture specific version of process_elf_file. */ > #include > diff --git a/elf/tst-ldconfig-no-soname.sh b/elf/tst-ldconfig-no-soname.sh > new file mode 100644 > index 0000000000..c60913d75a > --- /dev/null > +++ b/elf/tst-ldconfig-no-soname.sh > @@ -0,0 +1,46 @@ > +#!/bin/sh > +# Test that ldconfig not create symbolic links for libraries without a soname. > +# Copyright (C) 2023 Free Software Foundation, Inc. > +# This file is part of the GNU C Library. > + > +# The GNU C Library is free software; you can redistribute it and/or > +# modify it under the terms of the GNU Lesser General Public > +# License as published by the Free Software Foundation; either > +# version 2.1 of the License, or (at your option) any later version. > + > +# The GNU C Library is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > +# Lesser General Public License for more details. > + > +# You should have received a copy of the GNU Lesser General Public > +# License along with the GNU C Library; if not, see > +# . > + > +set -ex > + > +common_objpfx=$1 > +test_wrapper_env=$2 > +run_program_env=$3 > + > +testroot="${common_objpfx}elf/bug30125-test-directory" > +cleanup () { > + rm -rf "$testroot" > +} > +trap cleanup 0 > + > +rm -rf "$testroot" > +mkdir -p $testroot/lib $testroot/etc > + > +gcc /dev/null -o $testroot/lib/libsomething.so.1.2.3 -shared We can not assume gcc will be presented in PATH, you need to use the CC used on build. So pass the $(CC) on tst-ldconfig-no-soname.out rule and use it on the script. > + > +${test_wrapper_env} \ > +${run_program_env} \ > +${common_objpfx}elf/ldconfig -f /dev/null \ > + -C $testroot/etc/ld.so.cache \ > + $testroot/lib > + > +if [ -n "$(find $testroot/lib -type l)" ]; then > + echo "error: $0 - symlink found" > + exit 1 > +fi > diff --git a/sysdeps/generic/ldconfig.h b/sysdeps/generic/ldconfig.h > index 0e1a9a9515..e9e9e19d0f 100644 > --- a/sysdeps/generic/ldconfig.h > +++ b/sysdeps/generic/ldconfig.h > @@ -90,8 +90,6 @@ extern int process_file (const char *real_file_name, const char *file_name, > const char *lib, int *flag, unsigned int *isa_level, > char **soname, int is_link, struct stat *stat_buf); > > -extern char *implicit_soname (const char *lib, int flag); > - > /* Declared in readelflib.c. */ > extern int process_elf_file (const char *file_name, const char *lib, > int *flag, unsigned int *isa_level, char **soname,