From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f73.google.com (mail-wr1-f73.google.com [209.85.221.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 791E3198A25 for ; Wed, 25 Sep 2024 15:02:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.73 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727276570; cv=none; b=pb0z3gpKxbgl3Xa9OcS0tua2ff4R1uofNVZCog96IP6VUPLHH0YiiGvUhkAAox/VA91Qot0tUMuA21Aq9uzv1HOoM60sDzvZWOnnhGnTzj/0iOSS/AnEZ8ZRoSZteq1JsjOi3pI/zM1YaKZag5+PQ4Gz62JIXbWsHXUo88BfjSI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727276570; c=relaxed/simple; bh=4t4Zd7d88HUB4IQR7hyWqg3RF4QpMaNzLYFQ0q/SbWM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=mIpNHAmtVM5Oc8fvslU2ycXm1OwNjqrY2dZpS17tfSpmpcaOkDD1jqeYnttcfsI0Ay9Pg7dZIUdOzsGROSyCbZ+f+PnFQ9Wa3P9UiRMqpADy8z+A8eYIWgmTGdgIgSv8XDXfdBUlCzNhUbj9789OD87RCM+dgNkwGtVQbYssNmk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=EhiZDekE; arc=none smtp.client-ip=209.85.221.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="EhiZDekE" Received: by mail-wr1-f73.google.com with SMTP id ffacd0b85a97d-374c44e58a9so3281751f8f.1 for ; Wed, 25 Sep 2024 08:02:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1727276567; x=1727881367; darn=lists.linux.dev; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=pNx8CgL2JjB1FACn8gZOCDgH3XlG/cZ7BMhQN82yM0M=; b=EhiZDekEqVbkLFBsLxUg4nZy3K+HdqDPPZyzKQ1/ZYYgwNYLasCH+VFTnu9TSaCRXR N/geq5pEbFuYQzbdfb2BECLPgMUTTiGNgh/KYlWw6ySv7gJy1Ke9X0b1QILtetwwntXD wIg5MLWzhxtFuO1pEcVaVNw3IfbFQcfH0zYTJBHp5tFk0ioBVpqYGqBY0yIFYcuCl9M/ Ama5/nHzoBF6Euo9m8HZ1zGE30eYew88eb1YcGSgnazHFRMPvURzSUWmdWjZVmOfLhW+ OXSLbadP1dCdVDnU0mvWs8rn54159LO44jp1Eud0FOHX5WVL6e4zdFIeCTl6icEEvyEo veyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727276567; x=1727881367; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=pNx8CgL2JjB1FACn8gZOCDgH3XlG/cZ7BMhQN82yM0M=; b=PCxbuwJSYwBbSIKB7o/vZ5eSMMZjirXlSrJEBewLBhExwG47/g4MlhEbAMmPsQ+HPE fEuD6BJK/S3PcueNOkP8SqbO7lcEwCBzaxdSBCn8dtPa0Dc6XWNUq6O73a9kyutcDHWv a8+kj7zk8hhImub/WwcLypq2wBKDMlHl+dXcl5Jua18FyeUFm9ZTvMoxFVyV+Cv7zLHS TXLq1kNBV/Ky9lLmLM9f81p0cVEEfjEs0V1Qo7wYV3FcnKbybu139RcZlYrWeH20X7IU 72Pqebdt4Oc0naOFwgAZ7oaUc3xWejysCfk08QIXblyKb58sYxm3ua9J5dQpHFoZmuf9 5gEg== X-Forwarded-Encrypted: i=1; AJvYcCU9H+18IoGW9PgQRjyKObJQmckxq2w5NJ4yCm3hGVXQGsUUsASgtCcFLpWeBQIxW3JqdOOk@lists.linux.dev X-Gm-Message-State: AOJu0YzMcqzcR0e1OQMHTtAcc/Xm18L4IVH2xcHM3JJBebwV3biGvRJW 5Xl6NNgYFT0tRQXfiEpqHLZz9oLBXvYoZMPaFRFHbz2F3g3x1qN1PaTLb7/22a2edrppXw== X-Google-Smtp-Source: AGHT+IHtZA65C9eNefhgBWqmYh0kGm6u7UMHidCQ+DZrqbEOemMqvMt90MEtVjIphkQcIFg1qUNObHvF X-Received: from palermo.c.googlers.com ([fda3:e722:ac3:cc00:7b:198d:ac11:8138]) (user=ardb job=sendgmr) by 2002:a5d:5e04:0:b0:37c:c51b:d07f with SMTP id ffacd0b85a97d-37cc51bd43bmr945f8f.9.1727276566478; Wed, 25 Sep 2024 08:02:46 -0700 (PDT) Date: Wed, 25 Sep 2024 17:01:22 +0200 In-Reply-To: <20240925150059.3955569-30-ardb+git@google.com> Precedence: bulk X-Mailing-List: llvm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240925150059.3955569-30-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=4300; i=ardb@kernel.org; h=from:subject; bh=LZda20wnQiwQiTXt6tiHm30A1wODb0KBnxm/teE+Lu4=; b=owGbwMvMwCFmkMcZplerG8N4Wi2JIe2L6unSO+7/NsayfzpQ7uW+6/sf035bm8SjMXouItt6v vsqNLN3lLIwiHEwyIopsgjM/vtu5+mJUrXOs2Rh5rAygQxh4OIUgIlUFzIyLClfembn6Wlfb79Z nLiyrmmade3VvmNH2xq0FwTP8FnOwsHwmyXhPONLDfu9MQfFQ+MyCsJWuy/VFOpa8t9x77FzLsv /8AAA X-Mailer: git-send-email 2.46.0.792.g87dc391469-goog Message-ID: <20240925150059.3955569-52-ardb+git@google.com> Subject: [RFC PATCH 22/28] asm-generic: Treat PIC .data.rel.ro sections as .rodata From: Ard Biesheuvel To: linux-kernel@vger.kernel.org Cc: Ard Biesheuvel , x86@kernel.org, "H. Peter Anvin" , Andy Lutomirski , Peter Zijlstra , Uros Bizjak , Dennis Zhou , Tejun Heo , Christoph Lameter , Mathieu Desnoyers , Paolo Bonzini , Vitaly Kuznetsov , Juergen Gross , Boris Ostrovsky , Greg Kroah-Hartman , Arnd Bergmann , Masahiro Yamada , Kees Cook , Nathan Chancellor , Keith Packard , Justin Stitt , Josh Poimboeuf , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , linux-doc@vger.kernel.org, linux-pm@vger.kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-efi@vger.kernel.org, linux-arch@vger.kernel.org, linux-sparse@vger.kernel.org, linux-kbuild@vger.kernel.org, linux-perf-users@vger.kernel.org, rust-for-linux@vger.kernel.org, llvm@lists.linux.dev Content-Type: text/plain; charset="UTF-8" From: Ard Biesheuvel When running the compiler in PIC/PIE mode, it will emit data objects that are 'const' in the context of the program into the .data.rel.ro section if they contain absolute addresses of statically allocated global objects. This helps the dynamic loader distinguish between objects that are truly const from objects that will need to be fixed up by the loader before starting the program. This is not a concern for the kernel, but it does mean those .data.rel.ro input sections need to be handled. So treat them as .rodata. It also means some explicit uses of .rodata for global structures containing absolute addresses need to be changed to .data.rel.ro to prevent the linker from warning about incompatible section flags. Signed-off-by: Ard Biesheuvel --- include/asm-generic/vmlinux.lds.h | 2 +- include/linux/compiler.h | 2 +- scripts/kallsyms.c | 2 +- tools/objtool/check.c | 11 ++++++----- tools/objtool/include/objtool/special.h | 2 +- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index cc14d780c70d..2b079f73820f 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -456,7 +456,7 @@ . = ALIGN((align)); \ .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ __start_rodata = .; \ - *(.rodata) *(.rodata.*) \ + *(.rodata .rodata.* .data.rel.ro*) \ SCHED_DATA \ RO_AFTER_INIT_DATA /* Read only after init */ \ . = ALIGN(8); \ diff --git a/include/linux/compiler.h b/include/linux/compiler.h index ec55bcce4146..f7c48b7c0a6b 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h @@ -133,7 +133,7 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val, #define annotate_unreachable() __annotate_unreachable(__COUNTER__) /* Annotate a C jump table to allow objtool to follow the code flow */ -#define __annotate_jump_table __section(".rodata..c_jump_table") +#define __annotate_jump_table __section(".data.rel.ro.c_jump_table") #else /* !CONFIG_OBJTOOL */ #define annotate_reachable() diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c index 9c34b9397872..1700e97400aa 100644 --- a/scripts/kallsyms.c +++ b/scripts/kallsyms.c @@ -357,7 +357,7 @@ static void write_src(void) printf("#define ALGN .balign 4\n"); printf("#endif\n"); - printf("\t.section .rodata, \"a\"\n"); + printf("\t.section .data.rel.ro, \"a\"\n"); output_label("kallsyms_num_syms"); printf("\t.long\t%u\n", table_cnt); diff --git a/tools/objtool/check.c b/tools/objtool/check.c index 01237d167223..04725bd83232 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -2575,15 +2575,16 @@ static void mark_rodata(struct objtool_file *file) * Search for the following rodata sections, each of which can * potentially contain jump tables: * - * - .rodata: can contain GCC switch tables - * - .rodata.: same, if -fdata-sections is being used - * - .rodata..c_jump_table: contains C annotated jump tables + * - .rodata .data.rel.ro : can contain GCC switch tables + * - .rodata. .data.rel.ro. : same, if -fdata-sections is being used + * - .data.rel.ro.c_jump_table : contains C annotated jump tables * * .rodata.str1.* sections are ignored; they don't contain jump tables. */ for_each_sec(file, sec) { - if (!strncmp(sec->name, ".rodata", 7) && - !strstr(sec->name, ".str1.")) { + if ((!strncmp(sec->name, ".rodata", 7) && + !strstr(sec->name, ".str1.")) || + !strncmp(sec->name, ".data.rel.ro", 12)) { sec->rodata = true; found = true; } diff --git a/tools/objtool/include/objtool/special.h b/tools/objtool/include/objtool/special.h index 86d4af9c5aa9..89ee12b1a138 100644 --- a/tools/objtool/include/objtool/special.h +++ b/tools/objtool/include/objtool/special.h @@ -10,7 +10,7 @@ #include #include -#define C_JUMP_TABLE_SECTION ".rodata..c_jump_table" +#define C_JUMP_TABLE_SECTION ".data.rel.ro.c_jump_table" struct special_alt { struct list_head list; -- 2.46.0.792.g87dc391469-goog