From patchwork Fri Dec 17 17:39:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 49061 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 629503858003 for ; Fri, 17 Dec 2021 17:40:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 629503858003 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639762817; bh=3vn3DFKOP/ZxEGKkxHJ3VKMXK8tueSnLUUMhjrjITis=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=bVDJHZv0ds+oKac+WZxCKiapRY8z2hzbzL+dNbC0cgrd0EotXZTYL5ZSprwi3jd4s FZkLtQthFzWt4RsLXRUPKCQo+RNc3dh8rmsnsLcgqYuhU+qEL/vvGLmggrGfvaWyTv j6kNIpZ8U36tw0zp14ERU297Sl6grtnR/6iDGql0= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pj1-x1032.google.com (mail-pj1-x1032.google.com [IPv6:2607:f8b0:4864:20::1032]) by sourceware.org (Postfix) with ESMTPS id 68C34385801A for ; Fri, 17 Dec 2021 17:39:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 68C34385801A Received: by mail-pj1-x1032.google.com with SMTP id c22-20020a17090a109600b001b101f02dd1so6382529pja.5 for ; Fri, 17 Dec 2021 09:39:52 -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:subject:date:message-id:mime-version :content-transfer-encoding; bh=3vn3DFKOP/ZxEGKkxHJ3VKMXK8tueSnLUUMhjrjITis=; b=KFTGKHkPozdcX2vw2UvdbEM548f9DO579SU+RfNXT0no0xzcEjnXHA9BTcOq0zbEAg 1jIBZfA5Sx78ySP/7z771SSj36SG2CjXISzT0Ao5rtqRSuUHsgphyqnwOghY/5LejcnA 2oP+TvSIW6brMysMf/jg8Eql3GiHvYsllmCGh+QXkcCRKcEARAwH1kl0IhnDDGfkIIiT ehYvsJYfjdJsVw1TM7fud5k+oGaruvbSHoVlH9ZLazBHn+vYPrPPRqiP+laks4DEQvVe +7Fa6iiNraXs3HBpH6qrlBe7In8EFrRQLUqBdVdI9pVrf1gZSfuJB7CyyXj/rNXwwm6z 6iFw== X-Gm-Message-State: AOAM533Pd+0UzhCvzVWr8x6PrvdtDiJ/768sgdK5TdmCZqUZ75XhJbri PXpypDbnOuTTQvnvJwbpIh8kZg7AIO4= X-Google-Smtp-Source: ABdhPJxEvZWE9qTlPXLf6FqBs06fvOiFS5uvpCi3mqyyyIlsP4xEe1rXuf1NrrEERGK5f1grN7CLsg== X-Received: by 2002:a17:902:9694:b0:143:6f27:29ad with SMTP id n20-20020a170902969400b001436f2729admr4193495plp.46.1639762790899; Fri, 17 Dec 2021 09:39:50 -0800 (PST) Received: from gnu-tgl-3.localdomain ([172.58.35.133]) by smtp.gmail.com with ESMTPSA id me3sm9523969pjb.35.2021.12.17.09.39.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Dec 2021 09:39:50 -0800 (PST) Received: from gnu-tgl-3.. (localhost [IPv6:::1]) by gnu-tgl-3.localdomain (Postfix) with ESMTP id 456B9C06BC for ; Fri, 17 Dec 2021 09:39:49 -0800 (PST) To: libc-alpha@sourceware.org Subject: [PATCH v2] elf: Properly align all PT_LOAD segments [BZ #28676] Date: Fri, 17 Dec 2021 09:39:49 -0800 Message-Id: <20211217173949.4049-1-hjl.tools@gmail.com> X-Mailer: git-send-email 2.33.1 MIME-Version: 1.0 X-Spam-Status: No, score=-3028.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, LIKELY_SPAM_BODY, RCVD_IN_BARRACUDACENTRAL, 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: "H.J. Lu via Libc-alpha" From: "H.J. Lu" Reply-To: "H.J. Lu" Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Changes in v2: 1. Enable tst-p_align1 test if linker sets p_align according to sh_addralign. 2. Use the x86-64 tst-p_alignmod1.so binary only as a fallback. ---- Linker may set p_align of a PT_LOAD segment larger than p_align of the first PT_LOAD segment to satisfy a section alignment: Elf file type is DYN (Shared object file) Entry point 0x0 There are 10 program headers, starting at offset 64 Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flags Align LOAD 0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000834 0x0000000000000834 R E 0x1000 LOAD 0x0000000000000e00 0x0000000000001e00 0x0000000000001e00 0x0000000000000230 0x0000000000000230 RW 0x1000 LOAD 0x0000000000400000 0x0000000000400000 0x0000000000400000 0x0000000000000004 0x0000000000000008 RW 0x400000 ... Section to Segment mapping: Segment Sections... 00 .note.gnu.property .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt .plt.got .text .fini .rodata .eh_frame_hdr .eh_frame 01 .init_array .fini_array .data.rel.ro .dynamic .got .got.plt 02 .data .bss We should align the first PT_LOAD segment to the maximum p_align of all PT_LOAD segments, similar to the kernel commit: commit ce81bb256a224259ab686742a6284930cbe4f1fa Author: Chris Kennelly Date: Thu Oct 15 20:12:32 2020 -0700 fs/binfmt_elf: use PT_LOAD p_align values for suitable start address This patch includes an x86-64 binary of tst-p_alignmod1.so to verify that shared libraries with such PT_LOAD segments are mapped properly, in case that linker doesn't set p_align according to sh_addralign. --- configure | 39 ++++++++++++++++++++++++ configure.ac | 29 ++++++++++++++++++ elf/Makefile | 12 ++++++++ elf/dl-load.c | 9 +++++- elf/tst-p_align1.c | 27 ++++++++++++++++ elf/tst-p_alignmod1.c | 1 + sysdeps/x86_64/64/Makefile | 12 ++++++++ sysdeps/x86_64/64/tst-p_alignmod1.so.xz | Bin 0 -> 7476 bytes 8 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 elf/tst-p_align1.c create mode 100644 elf/tst-p_alignmod1.c create mode 100644 sysdeps/x86_64/64/Makefile create mode 100755 sysdeps/x86_64/64/tst-p_alignmod1.so.xz GIT binary patch literal 7476 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 M|GiNFqQ1fZ0T@Mr`Tzg` literal 0 HcmV?d00001 diff --git a/configure b/configure index 954bae803e..fa1f500f8c 100755 --- a/configure +++ b/configure @@ -6282,6 +6282,45 @@ fi $as_echo "$libc_cv_has_glob_dat" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the linker sets p_align following sh_addralign" >&5 +$as_echo_n "checking whether the linker sets p_align following sh_addralign... " >&6; } +if ${libc_cv_p_align_follow_sh_addralign+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.c <&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then + if $READELF -lW conftest.so | egrep 'LOAD.*0x1000$' > /dev/null && + $READELF -lW conftest.so | egrep 'LOAD.*0x4000$' > /dev/null; then + libc_cv_p_align_follow_sh_addralign=yes + else + libc_cv_p_align_follow_sh_addralign=no + fi +else + libc_cv_p_align_follow_sh_addralign=no +fi +rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_p_align_follow_sh_addralign" >&5 +$as_echo "$libc_cv_p_align_follow_sh_addralign" >&6; } +config_vars="$config_vars +have-p_align-follow-sh_addralign = $libc_cv_p_align_follow_sh_addralign" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fno-toplevel-reorder -fno-section-anchors" >&5 $as_echo_n "checking for -fno-toplevel-reorder -fno-section-anchors... " >&6; } if ${libc_cv_fno_toplevel_reorder+:} false; then : diff --git a/configure.ac b/configure.ac index 277d3527d2..3e500eec01 100644 --- a/configure.ac +++ b/configure.ac @@ -1472,6 +1472,35 @@ fi rm -f conftest*]) AC_SUBST(libc_cv_has_glob_dat) +AC_CACHE_CHECK(whether the linker sets p_align following sh_addralign, + libc_cv_p_align_follow_sh_addralign, [dnl +cat > conftest.c <&AS_MESSAGE_LOG_FD]) +then +dnl Look for 0x1000 and 0x4000 p_align. + if $READELF -lW conftest.so | egrep 'LOAD.*0x1000$' > /dev/null && + $READELF -lW conftest.so | egrep 'LOAD.*0x4000$' > /dev/null; then + libc_cv_p_align_follow_sh_addralign=yes + else + libc_cv_p_align_follow_sh_addralign=no + fi +else + libc_cv_p_align_follow_sh_addralign=no +fi +rm -f conftest*]) +LIBC_CONFIG_VAR([have-p_align-follow-sh_addralign], + [$libc_cv_p_align_follow_sh_addralign]) + AC_CACHE_CHECK(for -fno-toplevel-reorder -fno-section-anchors, libc_cv_fno_toplevel_reorder, [dnl cat > conftest.c <l_ld = 0; @@ -1151,7 +1152,9 @@ _dl_map_object_from_fd (const char *name, const char *origname, int fd, c->mapend = ALIGN_UP (ph->p_vaddr + ph->p_filesz, GLRO(dl_pagesize)); c->dataend = ph->p_vaddr + ph->p_filesz; c->allocend = ph->p_vaddr + ph->p_memsz; - c->mapalign = ph->p_align; + /* Remember the maximum p_align. */ + if (ph->p_align > p_align_max) + p_align_max = ph->p_align; c->mapoff = ALIGN_DOWN (ph->p_offset, GLRO(dl_pagesize)); /* Determine whether there is a gap between the last segment @@ -1226,6 +1229,10 @@ _dl_map_object_from_fd (const char *name, const char *origname, int fd, goto lose; } + /* Align all PT_LOAD segments to the maximum p_align. */ + for (size_t i = 0; i < nloadcmds; i++) + loadcmds[i].mapalign = p_align_max; + /* dlopen of an executable is not valid because it is not possible to perform proper relocations, handle static TLS, or run the ELF constructors. For PIE, the check needs the dynamic diff --git a/elf/tst-p_align1.c b/elf/tst-p_align1.c new file mode 100644 index 0000000000..cab9793220 --- /dev/null +++ b/elf/tst-p_align1.c @@ -0,0 +1,27 @@ +/* Check different alignments of PT_LOAD segments in a shared library. + Copyright (C) 2021 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 + . */ + +extern int do_load_test (void); + +static int +do_test (void) +{ + return do_load_test (); +} + +#include diff --git a/elf/tst-p_alignmod1.c b/elf/tst-p_alignmod1.c new file mode 100644 index 0000000000..2a98f0482f --- /dev/null +++ b/elf/tst-p_alignmod1.c @@ -0,0 +1 @@ +#include "tst-alignmod3.c" diff --git a/sysdeps/x86_64/64/Makefile b/sysdeps/x86_64/64/Makefile new file mode 100644 index 0000000000..c60c160604 --- /dev/null +++ b/sysdeps/x86_64/64/Makefile @@ -0,0 +1,12 @@ +ifeq ($(subdir),elf) +ifneq (yes,$(have-p_align-follow-sh_addralign)) +# Test alignments for all PT_LOAD segments with a tst-p_alignmod1.so +# binary if linker doesn't set p_align according to sh_addralign. +tests += \ + tst-p_align1 \ + +$(objpfx)tst-p_alignmod1.so: $(..)sysdeps/x86_64/64/tst-p_alignmod1.so.xz + cp -f $< $(objpfx) + unxz -f $(objpfx)tst-p_alignmod1.so.xz +endif +endif diff --git a/sysdeps/x86_64/64/tst-p_alignmod1.so.xz b/sysdeps/x86_64/64/tst-p_alignmod1.so.xz new file mode 100755 index 0000000000000000000000000000000000000000..0b0d4d953379649e2f3624b3305b3fc5c250eee2