From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oa1-x31.google.com (mail-oa1-x31.google.com [IPv6:2001:4860:4864:20::31]) by sourceware.org (Postfix) with ESMTPS id 8CD5D385840E for ; Mon, 20 Feb 2023 12:32:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8CD5D385840E 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-x31.google.com with SMTP id 586e51a60fabf-1720d087ff4so978722fac.1 for ; Mon, 20 Feb 2023 04:32:26 -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=iLW1foWGYfyflPpEjwhgY//+VR1X7pFAu0lncSKZZFk=; b=WYubwvFLfPQmF/PIXl23O22WA/cu/JANVtjjmtglZL1tmO1SEExNprugUxN2hHhgP9 K/vK0Sik01tvIlpNeStYyK7MWOcry1wlwK9TL42C8TANAZqza0KPvKS+m4NYZV4E30Ke y9rcQSQrHiCdA6JLKuQz8dMExHcAzJcnvVBQ6I4yrg2evKhCuBIdURgPEca4SDzOsV97 7oZVZs/kePeqaPjo1hwRaj/yZwnDnEDbNPE8woOsj9x2LMgKR3OIwtKqBk35xBcrpzJt hMg9ZrcjY3Qm8fwT2UZbh0HX0LkYn3Gb2qZOkWlHdGvvCUpJQ3QrsWjHkd8kndhUVgD0 wN+Q== 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=iLW1foWGYfyflPpEjwhgY//+VR1X7pFAu0lncSKZZFk=; b=gpBBmozQda5aA9++/vZ1WNOfRTgA7Qf8AXW45co2rbHExULXu6GiifhQDaz1UdCub0 etfSNTLTVMlwXIKEVigZ3HT//RVTS7Y7cQrz2INm64oftTeG6ogOTtzQuSwO7SIlJkaG wlMpiO3OrymN0WaxW0GzmeY+NqDEYHSWu62FGgVKCnfGkydqxHPWPfXIpOoDcOTfgSBw lLaFE1RSy43J011/7WP75H9IcDg/1ozSYjTivANNEf2GYs1WiKLYk1L/vObQAlvWaxGa iu9Nh6qFqFyVvJfp5ZcQdvHHd7UX3FLLBhV0ZOE7AtBzYXpp2z4JPk0HXULJM/XXTVxP Ij8Q== X-Gm-Message-State: AO0yUKVymjavAL/6EON9BZlLJ0zYmCopKhn/k77YalmMh0dPqCJwxgY4 VcAVnPQ0ZmnAe4k42S2ABri+I1pG33boPGVmzlc= X-Google-Smtp-Source: AK7set83vjXt3Ujbm1soxUjR8Zu8sIyixg/eVNUfCcmteK/HH2GzJIGbv68do7LjOiEb8HwfTkbxUw== X-Received: by 2002:a05:6870:2216:b0:16a:9f20:630e with SMTP id i22-20020a056870221600b0016a9f20630emr6291967oaf.4.1676896345111; Mon, 20 Feb 2023 04:32:25 -0800 (PST) Received: from ?IPV6:2804:1b3:a7c3:3a5:a0:9596:f951:7d30? ([2804:1b3:a7c3:3a5:a0:9596:f951:7d30]) by smtp.gmail.com with ESMTPSA id g1-20020a056870c38100b0016b0369f08fsm4369131oao.15.2023.02.20.04.32.23 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 20 Feb 2023 04:32:24 -0800 (PST) Message-ID: Date: Mon, 20 Feb 2023 09:32:21 -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 v4] elf: Restore ldconfig libc6 implicit soname logic [BZ #30125] Content-Language: en-US To: Joan Bruguera , libc-alpha@sourceware.org References: <20230216020810.3947682-1-joanbrugueram@gmail.com> <20230218215215.3930119-1-joanbrugueram@gmail.com> From: Adhemerval Zanella Netto Organization: Linaro In-Reply-To: <20230218215215.3930119-1-joanbrugueram@gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.9 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 18/02/23 18:52, 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 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") > Signed-off-by: Joan Bruguera LGTM, thanks. Reviewed-by: Adhemerval Zanella > --- > elf/Makefile | 14 ++++++ > elf/ldconfig.c | 4 +- > elf/readlib.c | 19 -------- > elf/tst-ldconfig-soname-lib-with-soname.c | 1 + > elf/tst-ldconfig-soname-lib-without-soname.c | 1 + > elf/tst-ldconfig-soname.sh | 49 ++++++++++++++++++++ > sysdeps/generic/ldconfig.h | 2 - > 7 files changed, 67 insertions(+), 23 deletions(-) > create mode 100644 elf/tst-ldconfig-soname-lib-with-soname.c > create mode 100644 elf/tst-ldconfig-soname-lib-without-soname.c > create mode 100644 elf/tst-ldconfig-soname.sh > > diff --git a/elf/Makefile b/elf/Makefile > index 2fc6391183..0d19964d42 100644 > --- a/elf/Makefile > +++ b/elf/Makefile > @@ -627,6 +627,7 @@ tests-special += \ > $(objpfx)noload-mem.out \ > $(objpfx)tst-ldconfig-X.out \ > $(objpfx)tst-ldconfig-p.out \ > + $(objpfx)tst-ldconfig-soname.out \ > $(objpfx)tst-leaks1-mem.out \ > $(objpfx)tst-rtld-help.out \ > # tests-special > @@ -859,6 +860,8 @@ modules-names += \ > tst-initorderb2 \ > tst-latepthreadmod \ > tst-ldconfig-ld-mod \ > + tst-ldconfig-soname-lib-with-soname \ > + tst-ldconfig-soname-lib-without-soname \ > tst-main1mod \ > tst-nodelete2mod \ > tst-nodelete-dlclose-dso \ > @@ -2402,6 +2405,17 @@ $(objpfx)tst-ldconfig-p.out : tst-ldconfig-p.sh $(objpfx)ldconfig > '$(run-program-env)' > $@; \ > $(evaluate-test) > > +LDFLAGS-tst-ldconfig-soname-lib-with-soname.so = \ > + -Wl,-soname,libtst-ldconfig-soname-lib-with-soname.so.1 > + > +$(objpfx)tst-ldconfig-soname.out : tst-ldconfig-soname.sh \ > + $(objpfx)ldconfig \ > + $(objpfx)tst-ldconfig-soname-lib-with-soname.so \ > + $(objpfx)tst-ldconfig-soname-lib-without-soname.so > + $(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. Ok. > 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) Ok. > 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 Ok. > diff --git a/elf/tst-ldconfig-soname-lib-with-soname.c b/elf/tst-ldconfig-soname-lib-with-soname.c > new file mode 100644 > index 0000000000..d1ab56ad58 > --- /dev/null > +++ b/elf/tst-ldconfig-soname-lib-with-soname.c > @@ -0,0 +1 @@ > +/* This file intentionally left blank */ > diff --git a/elf/tst-ldconfig-soname-lib-without-soname.c b/elf/tst-ldconfig-soname-lib-without-soname.c > new file mode 100644 > index 0000000000..d1ab56ad58 > --- /dev/null > +++ b/elf/tst-ldconfig-soname-lib-without-soname.c > @@ -0,0 +1 @@ > +/* This file intentionally left blank */ > diff --git a/elf/tst-ldconfig-soname.sh b/elf/tst-ldconfig-soname.sh > new file mode 100644 > index 0000000000..406f526dbf > --- /dev/null > +++ b/elf/tst-ldconfig-soname.sh > @@ -0,0 +1,49 @@ > +#!/bin/sh > +# Test that ldconfig creates symlinks according to the library's soname > +# (and in particular, does not create symlinks for libraries without a soname) > +# Copyright (C) 2000-2023 Free Software Foundation, Inc. > +# Copyright The GNU Toolchain Authors. > +# 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 > +cp "${common_objpfx}elf/tst-ldconfig-soname-lib-with-soname.so" \ > + $testroot/lib/libtst-ldconfig-soname-lib-with-soname.so.1.2.3 > +cp "${common_objpfx}elf/tst-ldconfig-soname-lib-without-soname.so" \ > + $testroot/lib/libtst-ldconfig-soname-lib-without-soname.so.1.2.3 > + > +${test_wrapper_env} \ > +${run_program_env} \ > +${common_objpfx}elf/ldconfig -vn $testroot/lib > + > +LINKS=$(cd $testroot/lib && find . -type l) > +if [ "$LINKS" != "./libtst-ldconfig-soname-lib-with-soname.so.1" ]; then > + echo "error: $0 - extra symlinks found" > + exit 1 > +fi Ok. > 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, Ok.