From: Kristen Carlson Accardi <kristen@linux.intel.com> To: keescook@chromium.org, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>, Arnd Bergmann <arnd@arndb.de> Cc: arjan@linux.intel.com, linux-kernel@vger.kernel.org, kernel-hardening@lists.openwall.com, rick.p.edgecombe@intel.com, Kristen Carlson Accardi <kristen@linux.intel.com>, Tony Luck <tony.luck@intel.com>, linux-arch@vger.kernel.org Subject: [PATCH v4 05/10] x86: Make sure _etext includes function sections Date: Fri, 17 Jul 2020 10:00:02 -0700 Message-ID: <20200717170008.5949-6-kristen@linux.intel.com> (raw) In-Reply-To: <20200717170008.5949-1-kristen@linux.intel.com> When using -ffunction-sections to place each function in it's own text section so it can be randomized at load time, the linker considers these .text.* sections "orphaned sections", and will place them after the first similar section (.text). In order to accurately represent the end of the text section and the orphaned sections, _etext must be moved so that it is after both .text and .text.* The text size must also be calculated to include .text AND .text.* Signed-off-by: Kristen Carlson Accardi <kristen@linux.intel.com> Reviewed-by: Tony Luck <tony.luck@intel.com> Tested-by: Tony Luck <tony.luck@intel.com> Reviewed-by: Kees Cook <keescook@chromium.org> --- arch/x86/kernel/vmlinux.lds.S | 17 +++++++++++++++-- include/asm-generic/vmlinux.lds.h | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S index 3bfc8dd8a43d..e8da7eeb4d8d 100644 --- a/arch/x86/kernel/vmlinux.lds.S +++ b/arch/x86/kernel/vmlinux.lds.S @@ -146,9 +146,22 @@ SECTIONS #endif } :text =0xcccc - /* End of text section, which should occupy whole number of pages */ - _etext = .; + /* + * -ffunction-sections creates .text.* sections, which are considered + * "orphan sections" and added after the first similar section (.text). + * Placing this ALIGN statement before _etext causes the address of + * _etext to be below that of all the .text.* orphaned sections + */ . = ALIGN(PAGE_SIZE); + _etext = .; + + /* + * the size of the .text section is used to calculate the address + * range for orc lookups. If we just use SIZEOF(.text), we will + * miss all the .text.* sections. Calculate the size using _etext + * and _stext and save the value for later. + */ + text_size = _etext - _stext; X86_ALIGN_RODATA_BEGIN RO_DATA(PAGE_SIZE) diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index a5552cf28d5d..34eab6513fdc 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -835,7 +835,7 @@ . = ALIGN(4); \ .orc_lookup : AT(ADDR(.orc_lookup) - LOAD_OFFSET) { \ orc_lookup = .; \ - . += (((SIZEOF(.text) + LOOKUP_BLOCK_SIZE - 1) / \ + . += (((text_size + LOOKUP_BLOCK_SIZE - 1) / \ LOOKUP_BLOCK_SIZE) + 1) * 4; \ orc_lookup_end = .; \ } -- 2.20.1
next prev parent reply index Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-07-17 16:59 [PATCH v4 00/10] Function Granular KASLR Kristen Carlson Accardi 2020-07-17 16:59 ` [PATCH v4 01/10] objtool: Do not assume order of parent/child functions Kristen Carlson Accardi 2020-07-17 16:59 ` [PATCH v4 02/10] x86: tools/relocs: Support >64K section headers Kristen Carlson Accardi 2020-07-17 17:00 ` [PATCH v4 03/10] x86/boot: Allow a "silent" kaslr random byte fetch Kristen Carlson Accardi 2020-07-17 17:00 ` [PATCH v4 04/10] x86: Makefile: Add build and config option for CONFIG_FG_KASLR Kristen Carlson Accardi 2020-07-17 17:00 ` Kristen Carlson Accardi [this message] 2020-07-17 17:00 ` [PATCH v4 06/10] x86/tools: Add relative relocs for randomized functions Kristen Carlson Accardi 2020-07-17 17:00 ` [PATCH v4 07/10] x86/boot/compressed: Avoid duplicate malloc() implementations Kristen Carlson Accardi 2020-07-17 17:00 ` [PATCH v4 08/10] x86: Add support for function granular KASLR Kristen Carlson Accardi 2020-07-17 17:00 ` [PATCH v4 09/10] kallsyms: Hide layout Kristen Carlson Accardi 2020-07-20 1:25 ` Kees Cook 2020-07-20 16:59 ` Kristen Carlson Accardi 2020-07-17 17:00 ` [PATCH v4 10/10] module: Reorder functions Kristen Carlson Accardi 2020-07-28 17:29 ` Jessica Yu 2020-07-22 9:27 ` [PATCH v4 00/10] Function Granular KASLR Miroslav Benes 2020-07-22 14:39 ` Kees Cook 2020-07-22 14:51 ` Joe Lawrence 2020-07-22 14:56 ` Joe Lawrence 2020-07-22 18:24 ` Kristen Carlson Accardi 2020-07-22 16:07 ` Josh Poimboeuf 2020-07-22 19:42 ` Kees Cook 2020-07-22 19:56 ` Kristen Carlson Accardi 2020-07-22 21:33 ` Josh Poimboeuf 2020-08-21 23:02 ` Kristen Carlson Accardi 2020-08-25 16:16 ` Joe Lawrence 2020-08-28 10:21 ` Miroslav Benes 2020-08-28 19:24 ` Josh Poimboeuf 2021-01-23 22:59 ` Fangrui Song 2021-01-25 17:21 ` Josh Poimboeuf 2020-08-03 11:39 ` Evgenii Shatokhin 2020-08-03 17:45 ` Kees Cook 2020-08-03 18:17 ` Joe Lawrence 2020-08-03 19:38 ` Frank Ch. Eigler 2020-08-03 20:11 ` Kees Cook 2020-08-03 21:12 ` Frank Ch. Eigler 2020-08-03 21:41 ` Kees Cook 2020-08-04 0:48 ` Frank Ch. Eigler 2020-08-04 17:04 ` Jessica Yu 2020-08-04 18:23 ` Joe Lawrence 2020-08-07 16:38 ` Kristen Carlson Accardi 2020-08-07 17:20 ` Kees Cook 2020-08-10 16:10 ` Kristen Carlson Accardi 2020-08-12 17:18 ` Kristen Carlson Accardi 2020-08-06 15:32 ` Ingo Molnar 2020-08-06 19:24 ` Kristen Carlson Accardi 2020-08-06 19:27 ` Kees Cook
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200717170008.5949-6-kristen@linux.intel.com \ --to=kristen@linux.intel.com \ --cc=arjan@linux.intel.com \ --cc=arnd@arndb.de \ --cc=bp@alien8.de \ --cc=hpa@zytor.com \ --cc=keescook@chromium.org \ --cc=kernel-hardening@lists.openwall.com \ --cc=linux-arch@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mingo@redhat.com \ --cc=rick.p.edgecombe@intel.com \ --cc=tglx@linutronix.de \ --cc=tony.luck@intel.com \ --cc=x86@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
LKML Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/lkml/0 lkml/git/0.git git clone --mirror https://lore.kernel.org/lkml/1 lkml/git/1.git git clone --mirror https://lore.kernel.org/lkml/2 lkml/git/2.git git clone --mirror https://lore.kernel.org/lkml/3 lkml/git/3.git git clone --mirror https://lore.kernel.org/lkml/4 lkml/git/4.git git clone --mirror https://lore.kernel.org/lkml/5 lkml/git/5.git git clone --mirror https://lore.kernel.org/lkml/6 lkml/git/6.git git clone --mirror https://lore.kernel.org/lkml/7 lkml/git/7.git git clone --mirror https://lore.kernel.org/lkml/8 lkml/git/8.git git clone --mirror https://lore.kernel.org/lkml/9 lkml/git/9.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 lkml lkml/ https://lore.kernel.org/lkml \ linux-kernel@vger.kernel.org public-inbox-index lkml Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.linux-kernel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git