From patchwork Thu Jun 19 23:53:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 114764 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 6B9A8393EA46 for ; Thu, 19 Jun 2025 23:56:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6B9A8393EA46 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=Ox90tk6R X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-yw1-x112f.google.com (mail-yw1-x112f.google.com [IPv6:2607:f8b0:4864:20::112f]) by sourceware.org (Postfix) with ESMTPS id 9F7A938D1FCE for ; Thu, 19 Jun 2025 23:53:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9F7A938D1FCE Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 9F7A938D1FCE Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::112f ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1750377232; cv=none; b=bcAPQN1exxRwAFeeVEfBF95W6CgSaRXelqk7rjY7Sa0DCmz7n67ERpKj1TgcdlQn9ncqN87FIA3hMI219L0ijL2vwPacZXIsMgAFJUIgI/OtB3orDZghwDdYFKzZsEM9BuGcRNpHH/j1xF5e4NCb8Rm8Vy7UoHC2Vl8eckMzlqM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1750377232; c=relaxed/simple; bh=eD213jAzgR6/3137CMmwFirb9Afe3JlhpuGcCIJ4pZA=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=yDzduTdLk+qJ+VPEVI82sQ/X1TM5Ic9uOjnnTENtdnx7aesboRmVs/8BfHBcjg2WbR6n+R17EqQMwKWwyCPgVaPr1+CeN4pRY0izfhfjGUGYu1i52U7HJi5gfR3QelM1Q4Y+okpC3Vck9X85e+uyRtHDWknvCqM7wCVvdHZd2Hk= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9F7A938D1FCE Received: by mail-yw1-x112f.google.com with SMTP id 00721157ae682-70e40e3f316so10947227b3.0 for ; Thu, 19 Jun 2025 16:53:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750377232; x=1750982032; darn=sourceware.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=Az96kalaGM+JV/EKxD6VySXJcR91zhdvW+Nkj/cg6Jw=; b=Ox90tk6RqoNMW+318NL/tPDtOVWIxMhQwwK9HGXXRP0raNjo++qSSOgY5Zw/lIz2Qa VVi9Fog7A9rYb+euy+4LSYHBZun9LOEVJ7nbAsdGLvhjay4Cr0d6rz35JHx1qw4OOXG2 GEE92mosOM4OGPWbDJPbObO65iriiRK95vPui7cBMoAMOGmuj1KX5fQBPqxCv299mSYW DnvJEruikVaPa+Zap6sOqdKMjo/6DdgdmYaj6Cq69ZX4B0JDEll6IZnUkyl3Il1i14Gd Kjw/v5flevqlq4iFmLBkZ0gEmueLPaObRTkyUMDBKFZyKNHxOQJJnN9ayxeLAivTvalf KImA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750377232; x=1750982032; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Az96kalaGM+JV/EKxD6VySXJcR91zhdvW+Nkj/cg6Jw=; b=Z11jqSL+r+HLcwjBlhrdZnZlI/3CUmkEyZi43ekT/4Sy21uBHSrDPjB/CSdx+vwA1z YYwfL1pN8nehLibfA+KTwjCWBAQvA0kjnKettMKhvwX/p6OK5Vr6KLE+N3NTaxClPf6q kO/eUjTWvfptJcr4hxA2cpPLOJikbETaC8u/mbgKtvOQatH+pXCt2BF5awOVeGO1Lk56 uCHTIx5mOfob6yAHhaF+lcZBXCNDWns7b6xLhK60Eml73xNxmAXRC128lfPcMWkPsfx3 2mcPyiX2rESU70w/4F7AavbzBjQaYHcJsaSY+RqbASrXXxRnk51CeGxnYvaVVZII8mN8 mcmQ== X-Gm-Message-State: AOJu0YymIG4B3MZhZwgZa7VEJxU7Rq2Zqln+OG1aDoL/XidvOOjsabPE ZuxmVgnW0eyoMV3qLaJlqpUtdVcRKJ+JadsYQiZrts8aBsNDQK/FT02uHZnHuLFriCX3PVQytNF ghUs8jW9Y8DFtQ0SFTZyIFshw3cr2pB0UjSPPm4w2Tg== X-Gm-Gg: ASbGncsy2ZB2V0Yy5N8kda96MoOGStEaAzv5OZzg/q5GEINyghghBRJ4S0jx4Uqtw4F Auyp/rbH+bG4p/+27i65wtYhVoiS4CW5PrtaSXw5+uofWs0tZv8xDWm1dstT6OFLlW+ro3z1Z0y H4Nw2VYe0HoLpkYWz5XLseBHI3sjYKXiawrfPAxZAL+J1R X-Google-Smtp-Source: AGHT+IEi2mI2K3owXF84tJgb2omX5uLRky8QcjlIMsOke14ZiV/TZFEuKCQHA5/zMPHukWvdJgCKOUgMxLyuDbwqIro= X-Received: by 2002:a05:690c:f09:b0:711:371e:ecbe with SMTP id 00721157ae682-712c654a7e3mr15442217b3.29.1750377231780; Thu, 19 Jun 2025 16:53:51 -0700 (PDT) MIME-Version: 1.0 From: "H.J. Lu" Date: Fri, 20 Jun 2025 07:53:15 +0800 X-Gm-Features: AX0GCFvFwpw6WmqXKuka1VcqNoht4GUg-BxbTk9f5u_llSuUNG1zzVpdFSSKTT8 Message-ID: Subject: [PATCH v4] elf: Add DL_ADDRESS_WITHOUT_RELOC [BZ #33088] To: GNU C Library , Florian Weimer , Alexander Monakov , Sam James X-Spam-Status: No, score=-3014.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, 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 X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces~patchwork=sourceware.org@sourceware.org Add DL_ADDRESS_WITHOUT_RELOC to force an address into a general purpose register to prevent loading it into a vector register directly before run-time relocation. This is an updated fix for BZ #33088. From 416168966bb0d03c47a6298be492c9e9705f508f Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Sun, 15 Jun 2025 11:38:54 +0800 Subject: [PATCH v4] elf: Add DL_ADDRESS_WITHOUT_RELOC [BZ #33088] Add DL_ADDRESS_WITHOUT_RELOC to force an address into a general purpose register to prevent loading it into a vector register directly before run-time relocation. This is an updated fix for BZ #33088. Signed-off-by: H.J. Lu --- elf/dl-before-reloc.h | 27 +++++++++++++++++++++++++++ elf/rtld.c | 10 +++++----- 2 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 elf/dl-before-reloc.h diff --git a/elf/dl-before-reloc.h b/elf/dl-before-reloc.h new file mode 100644 index 0000000000..042ee0bac7 --- /dev/null +++ b/elf/dl-before-reloc.h @@ -0,0 +1,27 @@ +/* Facilities before run-time relocation. + Copyright (C) 2025 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 + . */ + +/* Evaluate EXPR without run-time relocation for it. EXPR should be an + array, an address of an object, or a string literal. */ +#define DL_ADDRESS_WITHOUT_RELOC(expr) \ + ({ \ + __auto_type _result = (expr); \ + asm ("" : "+r" (_result)); \ + _result; \ + }) diff --git a/elf/rtld.c b/elf/rtld.c index e6a181dc31..1ad770c9b1 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -52,6 +52,7 @@ #include #include #include +#include #include @@ -476,11 +477,10 @@ _dl_start_final (void *arg, struct dl_start_final_info *info) #endif _dl_setup_hash (&_dl_rtld_map); _dl_rtld_map.l_real = &_dl_rtld_map; - _dl_rtld_map.l_map_start = (ElfW(Addr)) &__ehdr_start; - /* Prevent run-time relocations against __ehdr_start and _end. */ - asm ("" : "+g" (_dl_rtld_map.l_map_start)); - _dl_rtld_map.l_map_end = (ElfW(Addr)) _end; - asm ("" : "+g" (_dl_rtld_map.l_map_end)); + _dl_rtld_map.l_map_start + = (ElfW(Addr)) DL_ADDRESS_WITHOUT_RELOC (&__ehdr_start); + _dl_rtld_map.l_map_end + = (ElfW(Addr)) DL_ADDRESS_WITHOUT_RELOC (_end); /* Copy the TLS related data if necessary. */ #ifndef DONT_USE_BOOTSTRAP_MAP # if NO_TLS_OFFSET != 0 -- 2.49.0