From: Jann Horn <jannh@google.com> To: Kees Cook <keescook@chromium.org> Cc: Kristen Carlson Accardi <kristen@linux.intel.com>, Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>, "H . Peter Anvin" <hpa@zytor.com>, Arjan van de Ven <arjan@linux.intel.com>, Rick Edgecombe <rick.p.edgecombe@intel.com>, "the arch/x86 maintainers" <x86@kernel.org>, kernel list <linux-kernel@vger.kernel.org>, Kernel Hardening <kernel-hardening@lists.openwall.com> Subject: Re: [RFC PATCH 06/11] x86: make sure _etext includes function sections Date: Thu, 6 Feb 2020 14:15:30 +0100 [thread overview] Message-ID: <CAG48ez19kRC_5+ykvQCnZxLq6Qg3xUy7fEMf3pYrG46vBZt6jQ@mail.gmail.com> (raw) In-Reply-To: <202002060408.84005CEFFD@keescook> On Thu, Feb 6, 2020 at 1:26 PM Kees Cook <keescook@chromium.org> wrote: > I know x86_64 stack alignment is 16 bytes. That's true for the standard sysv ABI that is used in userspace; but the kernel uses a custom ABI with 8-byte stack alignment. See arch/x86/Makefile: # For gcc stack alignment is specified with -mpreferred-stack-boundary, # clang has the option -mstack-alignment for that purpose. ifneq ($(call cc-option, -mpreferred-stack-boundary=4),) cc_stack_align4 := -mpreferred-stack-boundary=2 cc_stack_align8 := -mpreferred-stack-boundary=3 else ifneq ($(call cc-option, -mstack-alignment=16),) cc_stack_align4 := -mstack-alignment=4 cc_stack_align8 := -mstack-alignment=8 endif [...] # By default gcc and clang use a stack alignment of 16 bytes for x86. # However the standard kernel entry on x86-64 leaves the stack on an # 8-byte boundary. If the compiler isn't informed about the actual # alignment it will generate extra alignment instructions for the # default alignment which keep the stack *mis*aligned. # Furthermore an alignment to the register width reduces stack usage # and the number of alignment instructions. KBUILD_CFLAGS += $(call cc-option,$(cc_stack_align8)) > I cannot find evidence for > what function start alignment should be. There is no architecturally required alignment for functions, but Intel's Optimization Manual (<https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf>) recommends in section 3.4.1.5, "Code Alignment": | Assembly/Compiler Coding Rule 12. (M impact, H generality) | All branch targets should be 16-byte aligned. AFAIK this is recommended because, as documented in section 2.3.2.1, "Legacy Decode Pipeline" (describing the frontend of Sandy Bridge, and used as the base for newer microarchitectures): | An instruction fetch is a 16-byte aligned lookup through the ITLB and into the instruction cache. | The instruction cache can deliver every cycle 16 bytes to the instruction pre-decoder. AFAIK this means that if a branch ends close to the end of a 16-byte block, the frontend is less efficient because it may have to run two instruction fetches before the first instruction can even be decoded.
next prev parent reply other threads:[~2020-02-06 13:16 UTC|newest] Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-02-05 22:39 [RFC PATCH 00/11] Finer grained kernel address space randomization Kristen Carlson Accardi 2020-02-05 22:39 ` [RFC PATCH 01/11] modpost: Support >64K sections Kristen Carlson Accardi 2020-02-06 12:38 ` Kees Cook 2020-02-05 22:39 ` [RFC PATCH 02/11] x86: tools/relocs: Support >64K section headers Kristen Carlson Accardi 2020-02-06 12:39 ` Kees Cook 2020-02-05 22:39 ` [RFC PATCH 03/11] x86/boot: Allow a "silent" kaslr random byte fetch Kristen Carlson Accardi 2020-02-06 1:08 ` Andy Lutomirski 2020-02-06 11:48 ` Kees Cook 2020-02-06 16:58 ` Kristen Carlson Accardi 2020-02-05 22:39 ` [RFC PATCH 04/11] x86/boot/KASLR: Introduce PRNG for faster shuffling Kristen Carlson Accardi 2020-02-06 1:11 ` Andy Lutomirski 2020-02-06 15:10 ` Jason A. Donenfeld 2020-02-07 7:23 ` Jean-Philippe Aumasson 2020-02-07 9:05 ` Kees Cook 2020-02-07 16:52 ` Kristen Carlson Accardi 2020-02-05 22:39 ` [RFC PATCH 05/11] x86: Makefile: Add build and config option for CONFIG_FG_KASLR Kristen Carlson Accardi 2020-02-06 10:30 ` Peter Zijlstra 2020-02-06 11:52 ` Kees Cook 2020-02-25 17:55 ` Arvind Sankar 2020-02-26 19:13 ` Kristen Carlson Accardi 2020-03-24 21:24 ` Kristen Carlson Accardi 2020-03-25 15:34 ` Kees Cook 2020-02-05 22:39 ` [RFC PATCH 06/11] x86: make sure _etext includes function sections Kristen Carlson Accardi 2020-02-06 12:26 ` Kees Cook 2020-02-06 13:15 ` Jann Horn [this message] 2020-02-06 16:27 ` David Laight 2020-02-06 14:39 ` Arvind Sankar 2020-02-06 15:29 ` Arvind Sankar 2020-02-06 16:11 ` Andy Lutomirski 2020-02-06 14:57 ` Arvind Sankar 2020-02-06 15:45 ` Arvind Sankar 2020-02-06 19:41 ` Kristen Carlson Accardi 2020-02-06 20:02 ` Andy Lutomirski 2020-02-07 9:24 ` Peter Zijlstra 2020-02-10 1:43 ` Kees Cook 2020-02-10 10:51 ` Peter Zijlstra 2020-02-10 15:54 ` Arjan van de Ven 2020-02-10 16:36 ` Arvind Sankar 2020-02-21 19:50 ` Josh Poimboeuf 2020-02-21 23:05 ` Arvind Sankar 2020-02-05 22:39 ` [RFC PATCH 07/11] x86/tools: Adding relative relocs for randomized functions Kristen Carlson Accardi 2020-02-06 12:37 ` Kees Cook 2020-02-05 22:39 ` [RFC PATCH 08/11] x86: Add support for finer grained KASLR Kristen Carlson Accardi 2020-02-06 1:17 ` Andy Lutomirski 2020-02-06 11:56 ` Kees Cook 2020-02-06 17:36 ` Kristen Carlson Accardi 2020-02-06 10:38 ` Peter Zijlstra 2020-02-06 12:06 ` Kees Cook 2020-02-06 14:52 ` Peter Zijlstra 2020-02-06 17:25 ` Kristen Carlson Accardi 2020-02-06 17:35 ` Peter Zijlstra 2020-02-06 17:43 ` Kristen Carlson Accardi 2020-02-25 17:49 ` Arvind Sankar 2020-02-26 19:26 ` Kristen Carlson Accardi 2020-02-05 22:39 ` [RFC PATCH 09/11] kallsyms: hide layout and expose seed Kristen Carlson Accardi 2020-02-06 12:32 ` Kees Cook 2020-02-06 17:51 ` Kristen Carlson Accardi 2020-02-06 19:27 ` Jann Horn 2020-03-02 19:01 ` Kristen Carlson Accardi 2020-03-02 19:08 ` Kees Cook 2020-03-02 19:19 ` Kristen Carlson Accardi 2020-02-27 2:42 ` Baoquan He 2020-02-27 16:02 ` Kees Cook 2020-02-28 3:36 ` Baoquan He 2020-02-05 22:39 ` [RFC PATCH 10/11] module: Reorder functions Kristen Carlson Accardi 2020-02-06 12:41 ` Kees Cook 2020-02-11 12:39 ` Jessica Yu 2020-02-05 22:39 ` [RFC PATCH 11/11] x86/boot: Move "boot heap" out of .bss Kristen Carlson Accardi 2020-02-06 0:11 ` Arvind Sankar 2020-02-06 0:33 ` Kristen Carlson Accardi 2020-02-06 11:13 ` Kees Cook 2020-02-06 14:25 ` Arvind Sankar 2020-02-06 21:32 ` 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=CAG48ez19kRC_5+ykvQCnZxLq6Qg3xUy7fEMf3pYrG46vBZt6jQ@mail.gmail.com \ --to=jannh@google.com \ --cc=arjan@linux.intel.com \ --cc=bp@alien8.de \ --cc=hpa@zytor.com \ --cc=keescook@chromium.org \ --cc=kernel-hardening@lists.openwall.com \ --cc=kristen@linux.intel.com \ --cc=linux-kernel@vger.kernel.org \ --cc=mingo@redhat.com \ --cc=rick.p.edgecombe@intel.com \ --cc=tglx@linutronix.de \ --cc=x86@kernel.org \ --subject='Re: [RFC PATCH 06/11] x86: make sure _etext includes function sections' \ /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
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).